【问题标题】:Passing an array through a hidden_field_tag in Rails通过 Rails 中的 hidden_​​field_tag 传递数组
【发布时间】:2011-05-29 09:06:47
【问题描述】:

我确实在 SO 上找到了这个 question,但这并没有帮助,真的。

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

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

这显然不起作用,因为它将 ids 作为字符串传递。

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails arrays parameters hidden-fields


    【解决方案1】:

    你好,也许有更好的解决方案,但你可以试试

    <% @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 %>
      

      【讨论】:

        【解决方案3】:

        您可以尝试将其解析为 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)
        

        【讨论】:

          【解决方案4】:

          在 Rails 4 上你可以这样做:

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

          因为 Rails 会自动将“[]”附加到字段名称(使用 multiple 时),接收表单的控制器会将其视为值数组。

          【讨论】:

          • hm,这对我根本不起作用,它会导致一个参数"article_ids"=&gt;"{:value=&gt;123, :multiple=&gt;true}"
          • @Ninigi 我丢失了测试输出的代码,你可以试试&lt;%= hidden_field "article_ids", id, multiple: true %&gt; 看看它是否有效,然后我会更新答案? (使用hidden_field 助手,不使用value:
          • 也不起作用,它只是忽略了多个选项。我已经看了一下 hidden_​​field 助手的代码。最后,它使用了通用的tag 方法,我没有找到任何关于multiple 的信息。也许这已被弃用?
          • 确保包含一个带有空数组或 nil 值的hidden_field_tag,否则,用户将无法“取消选中”所有值。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-31
          • 2011-12-05
          • 2016-05-31
          相关资源
          最近更新 更多