2

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

<%= 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&2 或 1&3 或 2&3 或 1&2&3)。我尝试使用它,但它不起作用:

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

任何想法?

4

4 回答 4

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
于 2013-10-25T16:00:56.560 回答
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

于 2013-10-25T16:01:07.063 回答
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 %>

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

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

于 2013-10-25T16:01:35.983 回答
0

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

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

文档:

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

于 2013-10-25T16:19:57.280 回答