如何使用check_box_tag将其传递给Rails中的params哈希?

时间:2016-07-07 02:43:05

标签: ruby-on-rails checkbox input params

所以我循环浏览了一系列电影角色,每个角色都有一个复选框。我想要它,当我点击"选择我的演员"按钮,我被重定向到teams_path(我的控制器中的索引方法),以便能够在我的参数哈希中获取我在数组中选择的字符的ID。

以下是代码:

  -@chars.each do |i|
   =image_tag(i.image)
   %br
   First Name:
   =i.f_name
   %br
   Last Name:
   =i.l_name
   %br
   Show :
   =i.show
   %br
   =check_box_tag 'char_ids[]', i.id
   %hr

= link_to "Select My Cast", teams_path, :method => :get

我在我的控制器中的index方法中放置了binding.pry,而params没有char_ids数组或任何相关信息。谢谢您的帮助;我意识到这是众所周知的问题。

2 个答案:

答案 0 :(得分:0)

如果您的控制器未获取参数,请参阅代码段;它很可能是:

  1. 您忘记在页面上添加表单标记
  2. 点击link_to锚点链接,不提交表单。
  3. 因此,请确保您拥有form_forform_tag设置,并确保使用某种“按钮”提交表单,而不仅仅是锚标记(link_to)。

    PS。您无需向method: :get添加link_to,因为默认情况下为get

    PSS。您可以在form_for check_box中使用multiple: true来获取多个值。

答案 1 :(得分:0)

我刚刚遇到这个问题,需要一段时间才能解决,所以我会发布我的解决方案给后人。

我有一个带有序列化哈希字段messaging_preferences=> { "articles"=>false, "marketing"=>false, "digest"=>false }

的用户模型 绊倒我的是需要在表单中使用fields_for

  <%= f.fields_for :messaging_preferences, user.messaging_preferences do |message_type| %>
    Marketing emails: <%= message_type.check_box :marketing, {}, "true", "false" %><br />
    Article emails: <%= message_type.check_box :articles, {}, "true", "false" %><br />
    Weekly digests: <%= message_type.check_box :digest, {}, "true", "false" %><br />
  <% end %>

并更新控制器中的user_params以反映(如此):``

但是这个(以及user_name&amp; email params)会生成对服务器的调用:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"{{token}}", "user"=>{"name"=>"Jimmy Johnny", "email"=>"spam@gmail.com", "messaging_preferences"=>{"marketing"=>"false", "articles"=>"false", "digest"=>"false"}}, "commit"=>"Update User", "id"=>"6"}

所以,这里我们已经发送了嵌套的params。