Reputation: 731
I have the following code in my views
<%= f.input :role_names, as: :check_boxes, collection: @program.role_names %>
And whenever I submit the form I am getting values something like ["admin, "moderator", ""]
but I was expecting something like ["admin, "moderator"]
, why is this?
Moreover I made a inspect element, and there was a <input name="user[role_names][]" type="hidden" value="">
tag after the last check box, within the same control-group. I suppose this is getting added at the last in the params[:user][:recipient_role_names]
.
How should I handle this? I know I can do a reject(&:blank?)
but is there a cleaner way on params[:user][:recipient_role_names]
?
I also want to know why the input element is getting added? Is it a bug in simple form or I have done something wrong?
Other info:
Upvotes: 24
Views: 11028
Reputation: 7373
Just add include_hidden: false
to your input params:
<%= f.input :role_names,
as: :check_boxes,
collection: @program.role_names,
include_hidden: false
%>
And the empty string value won't be sent in the array.
Obs: I've just added the simple_form input code here for quick reference, as it was Vasily's answer that pointed me in the right direction. Thank you
Upvotes: 3
Reputation: 24617
It's a Rails' feature. You'll be able disable it in Rails 4. You can read more about this on simple form issue #603 and Rails issue #5402
Upvotes: 23