我现在拥有的是一个下拉菜单,我只能选择一个:
<%= 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 %>
有什么想法吗?
答案 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结构。