我正在尝试将数组传递给hidden_field。
以下用户有3个角色[2,4,5]
>> u = User.find_by_login("lesa")
=> #<User id: 5, login: "lesa", email: "lesa.beaupry@gmail.com", crypted_password: "0f2776e68f1054a2678ad69a3b28e35ad9f42078", salt: "f02ef9e00d16f1b9f82dfcc488fdf96bf5aab4a8", created_at: "2009-12-29 15:15:51", updated_at: "2010-01-06 06:27:16", remember_token: nil, remember_token_expires_at: nil>
>> u.roles.map(&:id)
=> [2, 4, 5]
用户/ edit.html.erb
<% form_for @user do |f| -%>
<%= f.hidden_field :role_ids, :value => @user.roles.map(&:id) %>
当我提交编辑表单时,收到错误:UsersController中的ActiveRecord :: RecordNotFound #update“无法找到ID为245的角色”
如何将数组传递给hidden_field?
答案 0 :(得分:94)
我会使用这种技术。
<% @user.roles.each do |role| %>
<%= f.hidden_field :role_ids, :multiple => true, :value => role.id %>
<% end %>
:multiple
将[]
添加到name属性的末尾,将multiple="multiple"
添加到input元素,这是理想的。 Rails在为数组生成输入时会在内部使用它,例如在fields_for
。
不幸的是,没有详细记录。我打算解决这个问题。
答案 1 :(得分:13)
唯一对我有用的东西(Rails 3.1)是使用hidden_field_tag:
<% @users.roles.each do |role| %>
<%= hidden_field_tag "user_role_ids[]", role.id %>
<% end %>
答案 2 :(得分:4)
我认为这对我这样的人来说仍然会有所帮助,他们用Google搜索同样的问题。我想出了下一个小黑客:
<%= f.hidden_field "role_ids][", { :id => "role_ids", :value => [] } %>
(注意隐藏字段的'object_name'参数中的反转括号。)
答案 3 :(得分:2)
尝试:
<% @user.roles.each_with_index do |role| %>
<%= f.hidden_field "role_ids[]", :value => role.id %>
<% end %>
答案 4 :(得分:1)
使用Rails 4.2.6
我能够使用
<% @user.roles.each do |role|
<%= f.hidden_field :role_ids, :id => role.id, :value => role.id, :multiple => true %>
<% end %>
呈现:
<input id="12345" value="12345" multiple="multiple" type="hidden" name="role_form[role_ids][]">
尝试使用hidden_field_tag
或'role_ids[]'
参数详细信息未包含在我的form_params
中。
这没有用:
<% @user.roles.each do |role|
<%= hidden_field_tag 'role_ids[]', role %>
<% end %>
因为它呈现:
<input type="hidden" name="role_ids[]" id="role_ids_" value="12345">
并且由形式参数的控制器外部看到。
答案 5 :(得分:0)
尝试:
<%= f.hidden_field :role_ids, :value => @user.roles.map(&:id).join(", ") %>
答案 6 :(得分:0)
我意识到最初的问题涉及Rails form_for
表单,但是我在尝试向form_tag
表单添加隐藏字段时遇到了这个问题。解决方案略有不同。
hidden_field_tag
一直将我的ID转换为以空格分隔的字符串,例如"1 2 3"
,而不是我想要的["1", "2", "3"]
数组。根据{{3}},这是hidden_field_tag
的已知问题。这种方法最终适用于我的Rails 6 form_tag
表单:
在视图中:
<%= hidden_field_tag :role_ids, my_role_ids_array %>
在控制器中:
role_ids = params[:role_ids].split(' ').map(&:to_i)
答案 7 :(得分:0)
可以通过以下方式解决此类问题:
<% params[:filter].each do |filter| %>
<%= hidden_field_tag 'filter[]', filter %>
<% end %>