Rails:多个下拉菜单collection_select

时间:2015-05-29 15:24:17

标签: ruby-on-rails drop-down-menu collection-select

Super Rails n00b:目前我有一个包含以下代码的表单:

<%= f.collection_select :account_ids, @accounts, :id, :name, include_blank: true %>

它目前的工作原理我想要它但现在我想有多个下拉菜单,所以我可以选择多个帐户。我不希望多重选择在同一个下拉列表中。

如果我这样做:

<%= f.collection_select :account_ids, @accounts, :id, :name, include_blank: true %>
<%= f.collection_select :account_ids, @accounts, :id, :name, include_blank: true %>
<%= f.collection_select :account_ids, @accounts, :id, :name, include_blank: true %>

只有最后一个选择出现在参数中。我怎样才能使params看起来像这样:

"journal"=>{"account_ids"=>["1","2","3"]}

collection.select可以这样做,还是应该使用不同的东西?任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

您需要添加一个选项:multiple

<%= f.collection_select :account_ids, @accounts, 
                        :id, :name, { include_blank: true },
                         { multiple: true } %>

注意::multiple - 如果设置为true,则选择将允许多项选择。

我写了一个小片段来测试它。我的代码:

<%= form_for @track, url: fetch_path do |f| %>
  <%= f.collection_select :label, @tracks, :id, :title, {include_blank: true}, {multiple: true} %>
<% end %>

以下是页面:

drodown

或者,如果你真的想复制:

<% klass = f.object.class.model_name.param_key %>
<%= f.collection_select :account_ids, @accounts, :id, :name, { include_blank: true } , { name: "#{klass}[account_ids][]" } %>

将上述行写成3次。

答案 1 :(得分:0)

如果您的参数名称以&#34; []&#34;结尾,那么具有该名称的所有输入都将整理成具有该名称的数组。

因此,您的选择标记(在html中)将类似于

guava-11.0.2.jar
gdata-spreadsheet-3.0.jar
gdata-maps-2.0.jar
gdata-core-1.0.jar
jackson-core-asl-1.9.11.jar
jackson-core-2.1.3.jar
google-oauth-client-1.20.0.jar
google-http-client-jackson2-1.20.0.jar
google-http-client-jackson-1.20.0.jar
google-http-client-1.20.0.jar
google-api-client-1.20.0.jar

并使用collection_select助手进行此操作,请尝试

<select name="account_ids[]"><option>...