【form_for】初めてのselectボックス実装
hamlでのform_for のselectタグ
実装方法についてです。
collection_select
か select
か?
- DBから取得 → f.collection_select タグ
- 自分で配列を定義した場合など → f.select タグ
基本の構成
haml
= f.collection_select :カラム名(プロパティ名), 選択肢の配列, :value属性, :選択肢の表示, {オプション}, {HTMLオプション}
= f.select :カラム名(プロパティ名), 選択肢の配列, {オプション}, {HTMLオプション}
//選択肢を場合に応じて、変更・指定したい時
= f.select :カラム名(プロパティ名), options_for_select(選択肢の配列.map{|c|[表示する値, valueにする値, {追加属性}]}, 初期値のvalueを指定), {オプション}, {HTMLオプション}
= f.select :カラム名(プロパティ名), options_for_select(選択肢の配列.map{|c| [c[:表示したい値], c[:valueにしたい値]]}), {オプション}, {HTMLオプション}
haml
= f.collection_select :カラム名(プロパティ名), 選択肢の配列, :value属性, :選択肢の表示, {オプション}, {HTMLオプション}
= f.select :カラム名(プロパティ名), 選択肢の配列, {オプション}, {HTMLオプション}
//選択肢を場合に応じて、変更・指定したい時
= f.select :カラム名(プロパティ名), options_for_select(選択肢の配列.map{|c|[表示する値, valueにする値, {追加属性}]}, 初期値のvalueを指定), {オプション}, {HTMLオプション}
= f.select :カラム名(プロパティ名), options_for_select(選択肢の配列.map{|c| [c[:表示したい値], c[:valueにしたい値]]}), {オプション}, {HTMLオプション}
※ mapメソッド:要素の数だけ繰り返し、配列を作成する。戻り値がない時は、配列にnilが入る。
-
カラム名(プロパティ名):コントローラで、どんな名前として値を受け取りたいか?
(例)params[:form_withで指定したモデル名][:カラム名] - 選択肢の配列:選択肢の表示に使うデータ(optionタグに設定されるデータ) ※必ず配列か、ハッシュの型。
- value属性:valueとして取得したいカラムを指定。
- 選択肢の表示:optionタグに設定したい値のカラムを指定。
- オプション:初期表示したい文字列の定義、デフォルトで選択したい値の指定など。
- HTMLオプション:id名、class名など。※設定しない場合は 空のカッコ{}が必要。
初期値として、optionに定義していない文字列を表示する時の注意点
promptとinclude_blankの違い
・ 使い回さない場合(1回っきりの使用限定) → prompt:選択してください
・ 使い回したい場合 → include_blank:選択してください
例えば、新規登録ページの実装時に、同じビューを使って編集ページの実装を考えている場合、promptを使ってしまうと、編集ページで表示されない!!っと詰まりました。
参)実装したコード
haml
=f.collection_select :item_condition_id, ItemCondition.all, :id, :name, {include_blank: "選択してください"}, {class: "item_condition_box"}
DBからデータ取得してselectで表示する時の注意点
Author And Source
この問題について(【form_for】初めてのselectボックス実装), 我々は、より多くの情報をここで見つけました https://qiita.com/manbolila/items/b947396f7320e223c421著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .