「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 =>"都道府県を選択してください。"