collection_selectのメソッドを使うことでデータをプルダウンを表示させることができる。
引数が第一から第五までありそれぞれの役割は以下の通り。
第一引数に保存したいカラム名を記述。
第二引数に配列データを指定する。(この際、クラス名の命名規則があるのでアッパーキャメルで記述)
第三引数に表示する際に参照するカラム名を記述。
第四引数に実際に表示させたいカラム名を記述
第五引数にオプションの指定。(include_blankという値のない選択肢を先頭にするオプションもある)
記述方法の例としては以下の通り。
<%= form.collection_select(保存されるカラム名, オブジェクトの配列, カラムに保存される項目, 選択肢に表示されるカラム名, オプション, htmlオプション) %>
実際に記述したコードは以下の通り。
例えば発送地域などを表示させたい場合はまずモデルにプルダウンに表示させたい情報を記述。
class DeliveryArea < ActiveHash::Base
self.data = [
{ id: 1, name: '---' },
{ id: 2, name: '北海道' },
{ id: 3, name: '青森県' },
{ id: 4, name: '岩手県' },
{ id: 5, name: '宮城県' },
{ id: 6, name: '秋田県' },
{ id: 7, name: '山形県' },
{ id: 8, name: '福島県' },
{ id: 9, name: '茨城県' },
{ id: 10, name: '栃木県' },
{ id: 11, name: '群馬県' },
{ id: 12, name: '埼玉県' },
{ id: 13, name: '千葉県' },
{ id: 14, name: '東京都' },
{ id: 15, name: '神奈川県' },
{ id: 16, name: '新潟県' },
{ id: 17, name: '富山県' },
{ id: 18, name: '石川県' },
{ id: 19, name: '福井県' },
{ id: 20, name: '山梨県' },
{ id: 21, name: '長野県' },
{ id: 22, name: '岐阜県' },
{ id: 23, name: '静岡県' },
{ id: 24, name: '愛知県' },
{ id: 25, name: '三重県' },
{ id: 26, name: '滋賀県' },
{ id: 27, name: '京都府' },
{ id: 28, name: '大阪府' },
{ id: 29, name: '兵庫県' },
{ id: 30, name: '奈良県' },
{ id: 31, name: '和歌山県' },
{ id: 32, name: '鳥取県' },
{ id: 33, name: '島根県' },
{ id: 34, name: '岡山県' },
{ id: 35, name: '広島県' },
{ id: 36, name: '山口県' },
{ id: 37, name: '徳島県' },
{ id: 38, name: '香川県' },
{ id: 39, name: '愛媛県' },
{ id: 40, name: '高知県' },
{ id: 41, name: '福岡県' },
{ id: 42, name: '佐賀県' },
{ id: 43, name: '長崎県' },
{ id: 44, name: '熊本県' },
{ id: 45, name: '大分県' },
{ id: 46, name: '宮崎県' },
{ id: 47, name: '鹿児島県' },
{ id: 48, name: '沖縄県' }
]
include ActiveHash::Associations
has_many :items
end
次にViewsのnew.html.erbに冒頭で説明した手順に沿って記述。
<%= f.collection_select(:delivery_area_id, DeliveryArea.all, :id, :name, {}, {class:"select-box", id:"item-prefecture"}) %>
このように記述することでブラウザ上でプルダウンが表示される。