railsのフォーム(form_with)内で、セレクトボックスを実装する方法メモ


railsにて、複数の中から1つ選ぶときに用いるセレクトボックスを実装する方法のメモです。

セレクトボックス

上記の画像のようなものです。例は都道府県を選択するセレクトボックス。


f.collection_selectを用いる

railsで実現するには、collection_selectを用います。

ドキュメント:https://railsdoc.com/page/collection_select

説明:

<%= form.collection_select :prefecture_code, JpPrefecture::Prefecture.all, :code, :name %>

引数リスト:

1 メソッド名 何のkeyで渡されるか。フォームをsubmitすると {“prefecture_code” => “2”} などとパラメータが渡され、params[:prefecture_code]で選んだ都道府県コードを取得できる。
2 オブジェクトの配列 選択肢一覧を指定する。ここでは<JpPrefecture::Prefecture:0x00005650bff26f78 @code=32, @name=”島根県”>, …などというような配列。
3 value属性の項目params[:prefecture_code]のvalueとして何を指定するか。ここではcodeのため、”島根県”を選択するとparams[:prefecture_code] => 32となる。
4 テキストの項目何が選択肢として表示されるか。ここでは都道府県名・
5 その他後述

まとめると、f.collection_select(メソッド名, オブジェクトの配列, value属性の項目, テキストの項目, [その他])になります。

その他の引数


その他の引数を紹介します。

オプション

選択肢に関する細かい設定を追加できます。

例えば、
選択されていない場合、セレクトボックスになんと表示するか指定する

<%= form.collection_select :prefecture_code, JpPrefecture::Prefecture.all, :code, :name , {prompt: "選ぶ"}%>

最後の引数を追加しました。すると、何も選択していない場合
のようになります。

・デフォルトで選択しておくものを指定

<%= form.collection_select :prefecture_code, JpPrefecture::Prefecture.all, :code, :name , selected: 19 %>


オプション引数としてselectedを追加し、デフォルトにしたいvalueを指定します。


すると上のように、はじめから山梨県が選択されているのがわかります。(山梨県のコードは19)


コメント

タイトルとURLをコピーしました