複数のcollection_selectで選択したIDを配列形式で送信する


what

複数のcollection_selectで選択したIDを配列形式で送信する方法

why

collection_select を利用した選択項目を複数設置する場面に置いて、パラメーターに配列形式で格納するという手段を取りたいが、どこを探しても見つからないため、いろいろさ試行錯誤していたら発見したので忘備録として投稿します。

方法

まずcollection_selectの基本から

<%= f.collection_select(:item_id, Item.all, :id, :name, {}, {class:"item-select"}) %>

引数の説明

第一引数
:item_id 保存先のカラム名

第二引数
Item.all データの入っているモデルを指定

第三引数
id 表示する際に参照するDBのカラム名

第四引数
name 実際に表示されるカラム名

第五引数
(オプション) {} {}はオプションの指定なし

htmlオプション {class:"genre-select"} CSSなどを当てるためのクラスなどを記述
↑今回はココに注目


こうします

<%= f.collection_select(:item_id, Item.all, :id, :name, {}, {name: item_ids[], class:"item-select"}) %>

name: item_ids[]

これです。 ここにname属性を記述します。name属性に[]を使用することにより配列として扱うことが出来るようになります。

<%= f.collection_select(:item_id, Item.all, :id, :name, {}, {name: item_ids[], class:"item-select"}) %>

<%= f.collection_select(:item_id, Item.all, :id, :name, {}, {name: item_ids[], class:"item-select"}) %>

この状態で送信すると以下のようにパラメータが確認できます。

以上となります。
初めての記事投稿なので、色々情けない部分が多いかと思われるかもしれませんがご容赦ください。