48

我正在尝试将数组传递给 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) %>

当我提交我的编辑表单时,我收到一个错误:ActiveRecord::RecordNotFound in UsersController#update “找不到 ID=245 的角色

如何将数组传递到 hidden_​​field?

4

7 回答 7

113

我会使用这种技术。

<% @user.roles.each do |role| %>
    <%= f.hidden_field :role_ids, :multiple => true, :value => role.id %>
<% end %>

:multiple[]在 name 属性的末尾和multiple="multiple"input 元素中都添加了,这是理想的。Rails 在为数组生成输入时在内部使用它,例如 in fields_for

不幸的是,它没有得到很好的记录。我会考虑解决这个问题。

于 2012-04-27T00:08:56.330 回答
16

唯一对我有用的东西(Rails 3.1)是使用 hidden_​​field_tag:

<% @users.roles.each do |role| %>
    <%= hidden_field_tag "user_role_ids[]", role.id %>
<% end %> 
于 2012-03-16T06:27:43.443 回答
3

尝试:

 <% @user.roles.each_with_index do |role| %>
    <%= f.hidden_field "role_ids[]", :value => role.id %>
 <% end %>
于 2010-01-06T20:53:29.543 回答
3

使用 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">

并且被表单参数之外的控制器看到。

于 2016-08-24T07:07:09.767 回答
2

尝试:

<%= f.hidden_field :role_ids, :value => @user.roles.map(&:id).join(", ") %>

编辑:注意-您需要ids.split(", ")在控制器中将它们从字符串转换为数组

于 2010-01-06T18:24:55.753 回答
1

我意识到最初的问题涉及 Railsform_for表单,但我只是在尝试向form_tag表单添加隐藏字段时遇到了这个问题。解决方案略有不同。

不断将hidden_field_tag我的 id 转换为空格分隔的字符串,例如,而不是我想要"1 2 3"的数组。["1", "2", "3"]根据文档,这是一个已知问题hidden_field_tag。这是最终适用于我的 Rails 6form_tag表单的方法:

在视图中:

<%= hidden_field_tag :role_ids, my_role_ids_array %>

在控制器中:

role_ids = params[:role_ids].split(' ').map(&:to_i)
于 2020-02-29T18:18:21.667 回答
0

可以通过以下方式解决此类问题:

      <% params[:filter].each do |filter| %>
        <%= hidden_field_tag 'filter[]', filter %>
      <% end %>
于 2021-04-20T19:59:44.940 回答