在Rails中通过hidden_field_tag传递数组

11

我在SO上找到了这个问题,但它并没有真正帮助我。

所以,我想通过一个隐藏域标签传递一个数组。目前我的代码是:

<%= hidden_field_tag "article_ids", @articles.map(&:id) %>

显然这样做是行不通的,因为它将ID作为字符串传递。

我该怎么做呢?

4个回答

35

嗨,也许有更好的解决方案,但您可以尝试一下

<% @articles.map(&:id).each do |id| %>
  <%= hidden_field_tag "article_ids[]", id %>
<% end %>

2
以下内容适用于我在Rails 4.1.10上的使用。
<% @your_array.map().each do |array_element| %>
    <%= hidden_field_tag "your_array[]", array_element %>
<% end %>

1

在Rails 4中,您可以这样做:

<% @articles.map(&:id).each do |id| %>
  <%= hidden_field_tag "article_ids", value: id, multiple: true %>
<% end %>

由于Rails会自动在字段名称末尾添加"[]"(当使用multiple时),接收表单的控制器将把它视为一个值数组。


嗯,这对我完全没用,它会导致一个参数 "article_ids"=>"{:value=>123, :multiple=>true}" - Ninigi
@Ninigi,我丢失了测试输出的代码,你能否尝试使用<%= hidden_field "article_ids", id, multiple: true %>来检查它是否有效,然后我会更新答案?(使用hidden_field助手而不使用value: - Bruno Peres
也不起作用,它只是忽略了多选项。我已经简单查看了hidden_field助手的代码。最终,它使用通用的“tag”方法,我没有找到任何关于多选的内容。也许这已经过时了? - Ninigi
请确保在表单中包含一个带有空数组或nil值的hidden_field_tag,否则用户将无法“取消选中”所有值。 - Joshua Pinter

1
你可以尝试将其解析为json格式并从中解析:
articles_list = @articles.map(&:id).to_json # gives u: [1,2,3,4,5]
                                            # note that the result is a string instead of an array
article_ids = JSON.parse(articles_list)

或者你可以使用逗号分隔的字符串:

articles_list = @articles.map(&:id).join(",") # gives u: 1,2,3,4,5
                                              # note that this result is a string also
article_ids = articles_list.split(/,/).map(&:to_i)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接