Rails5选择复选框表单

时间:2018-02-06 20:38:29

标签: ruby-on-rails forms

我希望我的用户从预先过滤的模型实例列表中进行选择。

假设@pages是多个页面的ActiveRecord关系。

然后在我看来,我想显示一个用户可以选择它们的表单:

[X] Page One
[ ] Page Two
[ ] Page Three

在我的下一个控制器动作中,它是类似

的参数
selection => [12345 => true, 23456 => false, 56788 => false]

数字是ids。甚至更好的实例本身。

我唯一可以理解的是

<%= form_with url: validate_pages_path do |form| %>
  <% Page.all.each do |page| %>
    <%= check_box_tag page.id %>
    <%= label_tag page.name %>
  <% end %>
  <%= form.submit %>
<% end %>

然后我最终得到一个类似于

的params
 {"utf8"=>"✓", "authenticity_token"=>"...", "992936610"=>"1", "992936644"=>"1", "commit"=>"Save "}

我没有一个嵌套pages的模型,这肯定会让它变得非常棘手

1 个答案:

答案 0 :(得分:3)

正如我在评论中所建议的,这里是您案例中的代码:

<%= form_with url: validate_pages_path do |form| %>
  <% Page.all.each do |page| %>
    # new stuff below
    <%= hidden_field_tag "pages[#{page.id}]", false %>
    <%= check_box_tag "pages[#{page.id}]", true %>
    # /new stuff above
    <%= label_tag page.name %>
  <% end %>
  <%= form.submit %>
<% end %>

正如您所看到的,我们使用了名称"pages[page.id]",因此您应该最终拥有params[:pages]来包装整个内容。