将一组Ids从视图传递回rails控制器

时间:2015-01-25 17:34:06

标签: ruby-on-rails ruby

我有一个表单,人们可以在其中选择日期,然后点击"过滤"。然后将此日期作为参数传递回控制器,并使用名为@users的用户列表重新加载视图

然后我有一个表单,我想将@users作为数组传递回来

我试过这个

  = form_tag('/complete_export', :method => "put", :id => 'export') do |f|
    %p=hidden_field_tag "users", "#{@users.map(&:id)}"
    %p=submit_tag("Export results »")

但当它返回控制器时,参数返回看起来像这样......

[8] pry(#<AccountsController>)> params[:users]
"[53533, 51780, 17418, 153, 50667, 141, 48968, 48343, 48338, 47377, 44736, 40410, 27878, 172, 150, 34457, 37757, 26715, 31240, 31178, 30016, 184, 177, 196, 193, 155, 170]"

所以它实际上是以字符串形式回来的。如何将其作为数组传递给控制器​​,或将其在控制器中更改为数​​组。

修改

所以我现在修改了我的表格......

  = form_tag('/complete_export', :method => "get", :id => 'export') do |f|
    - @users.each do |user|
      =hidden_field_tag :user_ids, :multiple => true, :value => user.id
    %p=submit_tag("Export results »")

回到控制器中,参数显示为......

        "utf8" => "✓",
"employee_ids" => "{:multiple=>true, :value=>170}",
      "commit" => "Export results »",
      "action" => "complete_payrite_export",
  "controller" => "accounts"
显然,我错过了一些东西:(

2 个答案:

答案 0 :(得分:2)

我会使用multiple选项,在我看来比在控制器中进行投射更清晰。

- @users.each do |user|
  = f.hidden_field :user_ids, :multiple => true, :value => user.id

您将在控制器中获得一个名为user_ids的数组。

答案 1 :(得分:1)

这是因为您使用hidden_field_tag f.hidden_field个参数,这里是hidden_field_tag替代方案:

- @users.each do |user|
  = hidden_field_tag 'user_ids[]', user.id