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可以这样做,还是应该使用不同的东西?任何帮助将不胜感激。谢谢!
答案 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 %>
以下是页面:
或者,如果你真的想复制:
<% 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>...