セレクトボックスの構造
セレクトボックスの初期値(?)を設定したい
(画像サイズ・・・)
↑「選択してください」みたいな何も選択していない時の選択肢を設定したい
セレクトボックスの構造
<%= f.select :category_id, Category.pluck(:name, :id), { include_blank: true }, class: ‘form-control’ %>
<%= f.select :カラム名, 選択肢として表示する配列またはハッシュ, {オプション}, {HTMLオプション}%>
- このオプション部分に
include_blank: '選択してください'
とすると指定した文字列が先頭に表示される include_blank: true
とすると空の選択肢が先頭に表示される- include_blankを使わずに初期状態でいずれかの項目を選択肢た状態にしておきたい場合、
{selected: 1}
のようにオプションに設定すればOK
真ん中のCategory.pluck(:name, :id)
pluckメソッド
引数に指定したカラムの値を配列で返してくれる。
[1] pry(main)> Category.pluck(:name, :id) (0.1ms) select sql from (select * from sqlite_master where type='table' union select * from sqlite_temp_master where type='table') where tbl_name = 'taxonomies' (0.3ms) SELECT "taxonomies"."name", "taxonomies"."id" FROM "taxonomies" WHERE "taxonomies"."type" IN ('Category') => [["テストカテゴリ1", 4]]
↑引数に複数カラムを指定した時の返り値は二次元配列で返される。
二次元配列とは、categoriesという大きな箱(配列)の中に入っている[:nameと:id]が入った小さな箱みたいなイメージ
categories = [["カテゴリー1", 1],["カテゴリー2", 2]]
pluckメソッドで指定されたCategoryのnameとidを含む配列を返している。この配列がセレクトの選択肢として使われる。