Passing an array into hidden_field ROR
Try:
<% @user.roles.each_with_index do |role| %>
<%= f.hidden_field "role_ids[]", :value => role.id %>
<% end %>
using Rails 4.2.6
I was able to use
<% @user.roles.each do |role|
<%= f.hidden_field :role_ids, :id => role.id, :value => role.id, :multiple => true %>
<% end %>
which rendered:
<input id="12345" value="12345" multiple="multiple" type="hidden" name="role_form[role_ids][]">
trying to use hidden_field_tag
or the 'role_ids[]'
the param details were not being included in my form_params
.
This didn't work:
<% @user.roles.each do |role|
<%= hidden_field_tag 'role_ids[]', role %>
<% end %>
because it renders:
<input type="hidden" name="role_ids[]" id="role_ids_" value="12345">
and is seen by the controller outside of the form params.
I would use this technique.
<% @user.roles.each do |role| %>
<%= f.hidden_field :role_ids, :multiple => true, :value => role.id %>
<% end %>
:multiple
adds both the []
to the end of the name attribute and multiple="multiple"
to the input element, which is ideal. Rails uses this internally when it generates inputs for arrays, such as in fields_for
.
Unfortunately it is not well-documented. I'm going to look into fixing this.
The only thing that works for me (Rails 3.1) is using hidden_field_tag:
<% @users.roles.each do |role| %>
<%= hidden_field_tag "user_role_ids[]", role.id %>
<% end %>