LoginSignup
0
1

More than 3 years have passed since last update.

【form_for】初めてのselectボックス実装

Last updated at Posted at 2020-04-19

hamlでのform_for のselectタグ実装方法についてです。

ビューのイメージ
Alt text

collection_selectselectか?

  • 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オプション}

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で表示する時の注意点

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1