Rails3:如何在表单中实现多个复选框?

时间:2013-10-25 15:51:01

标签: ruby-on-rails ruby-on-rails-3

我现在拥有的是一个下拉菜单,我只能选择一个:

<%= form_for(@submission) do |f| %>
    <%= f.collection_select :id, Submission::SUB_ID, :to_s, :to_s %>
<% end %>

模型SUB_ID=[1,2,3]中的Submission

我想实现复选框而不是下拉菜单,以便我可以选择多个SUB_ID(即1&amp; 2或1&amp; 3或2&amp; 3或1&amp; 2&amp; 3)。我试图使用它,但它不起作用:

<%= f.check_box :id, Submission::SUB_ID, :to_s, :to_s %>

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

试试这个:

# view
<%= form_for(@submission) do |f| %>
  <%= Submission::SUB_ID.each do |sub_id| %>
    <%= f.checkbox 'ids[]', value: sub_id, checked: @submission.id == sub_id %>
    <%= sub_id %>
  <% end %>
<% end %>

# controller
params[:submission][:ids].each do |checked_sub_id|
  # do your logic here
end

答案 1 :(得分:1)

你必须迭代SUB_ID 不知怎的这样......

<% Submission::SUB_ID.each do |ssid| %>
   <%= f.check_box "ids[]", value: ssid %>
<% end %>

或者您可以使用formtastic gem。它有:as=>:check_boxes个输入字段http://www.ruby-doc.org/gems/docs/n/nuatt-formtastic-0.2.3/Formtastic/Inputs/CheckBoxesInput.html

答案 2 :(得分:0)

核心答案是您需要遍历Submission::SUB_ID中的每个项目,并为每个ID设置一个复选框。根据您的模型设置方式和您想要做的事情,您可能需要更多地参与表单构建。我不愿意提供具体的例子,而不知道你希望数据如何回到控制器

<%= form_for(@submission) do |f| %>
    <% Submission::SUB_ID.each do sub_id %>
      <%= f.check_box_tag 'submission_ids[]', sub_id %>
    <% end %>
<% end %>

请注意,这不会默认任何要检查的内容,也不会作为提交参数的一部分返回。

通常当我遇到类似情况时,我会使用嵌套表单来添加或删除对象。

答案 3 :(得分:0)

如果您使用的是Rails 4,则会有一个新帮助程序collection_check_boxes,它有助于简化复选框的构建。

<%= f.collection_check_boxes :submission_ids, Submission::SUB_ID, :to_s, :to_s %>

文档:

如果查看第二个链接中的文档,您还将了解如何使用可选块语法自定义每个复选框的HTML结构。