2015-05-29 86 views
1

超級滑軌的n00b這裏:目前,我有下面的代碼形式:的Rails:多個下拉菜單collection_select

<%= 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。我怎樣才能使它所以PARAMS應該是這樣的:

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

能collection.select做到這一點還是我應該使用不同的東西?任何幫助將不勝感激。謝謝!

回答

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

+0

奧雅納您好,感謝您的答覆。但是,我只想製作多個下拉菜單,無法在同一菜單中選擇多個選項。 – ckg61386

+0

@ ckg61386您正在進行多項選擇,但最大爲'3'。你可以使用'javascript'處理。如果您想要最大的'N'值選擇,則無需複製相同的下拉值N次...... –

+0

@ ckg61386立即嘗試。 –

0

如果您的參數名稱以「[]」結尾,那麼具有該名稱的所有輸入將被整理成具有該名稱的數組。

所以,你的選擇標記(HTML)會像

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

,這使用collection_select幫手做,儘量

<%= f.collection_select :account_ids, @accounts, :id, :name, {include_blank: true}, {:name => 'account_ids[]'} %> 
+0

乍一看,這實際上給了它單獨的account_id參數,但我希望它在期刊params中,如:「journal」=> {accounts:[「1」,「2」,「3」]} – ckg61386

+0

那麼名稱應該是「journal [accounts] []」。在方括號內放置一個字符串使其成爲散列結構而不是數組。這些可以以任何想要構造嵌套數組和散列的數據結構的方式進行組合。 –

+0

然後,在你原來的問題中,你說你需要params像':journal => {:account_ids => [1,2,3]}',(我錯過了,對不起),所以如果你想'account_ids'而不是'account'(就像你在你的評論中所說的那樣),那麼name屬性應該是''journal [account_ids] []「' –