「rails」f.collection_selectの使用方法
データベースと連動してセレクトメニューを作成する際は
collection_selectを使用する
例:shopを登録する際に都道府県を選択する場合
prefecture.rb
|id |name | | 1|北海道 | | 2|青森県 | | 3|岩手県 |
shop.rb
|id |name |prefecture_id| | 1|あ株式会社 |1 | 2|い株式会社 |3 | 3|う株式会社 |3
上記テーブルの中身をセレクトメニューの選択肢として利用するには以下のように
書く。
<%= form_for @user do |f| %> <%= f.label :prefecture_id %> <%= f.collection_select :prefecture_id, Prefecture.all, :id, :name %> <%- end -%>
文法
<%= f.collection_select (1),(2),(3),(4) %>
(1)→属性名:フォームの対象モデルの中の該当する属性名
(2)→配列名:セレクトメニューの選択するのに使用するデータの配列。連想配列かオブジェクト
(3)→valueになるカラム名:セレクトメニューで値として扱うカラムの名前※optionのvalueの値になる
(4)→表示されるカラム名:セレクトメニュー表示名として扱うカラム名
※shopのviewの中なのにPrefecture.allが使用できるのはクラスメソッドはどこからでも呼び出せるため
その他オプション
プルダウンメニューの先頭に空白行を追加する(:include_blank オプション)
・セレクトメニューの選択肢の先頭に空白の選択肢を追加する。
・一旦どれかを選択しても、未選択の状態に戻せる。
・空白行の value は空文字列が指定されます。
<%= f.collection_select :prefecture_id, Prefecture.all, :id, :name, :include_blank => true %>
※include_blank オプションの値を true/false ではなく文字列にすると、その文字列が使用される。
値が未設定のときにプロンプトを表示(:promptオプション)
:prompt =>"都道府県を選択してください。"