1

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 %>

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

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

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

4

2 回答 2

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 次。

于 2015-05-29T15:29:30.310 回答
0

如果您的参数名称以“[]”结尾,那么所有具有该名称的输入将被整理到具有该名称的数组中。

所以,你的选择标签(在 html 中)会像

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

并使用 collection_select 帮助器来实现这一点,请尝试

<%= f.collection_select :account_ids, @accounts, :id, :name, {include_blank: true}, {:name => 'account_ids[]'} %>
于 2015-05-29T15:31:04.280 回答