どうもおはようポテト(@ohayoupoteto22)です。
セレクトボックスではdisabledという属性を使うことで”一部の項目を選択できない”ように指定できますよね。
こんな感じに↓
そこで多くの方が抱く疑問がこちら。
くるみ
Railsでセレクトボックスにdisabledを適用する方法は?
- Railsでセレクトボックスの一部を選択できないようにしたい
- disabledを指定してもうまくいかないんだけど…
という方に向けて「Railsでセレクトボックスにdisabledを適用する方法」をまとめました。
自分の備忘録ですが参考になれば幸いです⸝⸝- ̫ -⸝⸝
Railsでセレクトボックスにdisabledを適用する方法
@chickens=Chicken.all
@chickens_array=["好きな鶏を選んでね"]
@chickens.each do |chicken|
@chickens_array << chicken.name
end
まずは結論から。
上のように、コントローラーで@chicken_arrayというという配列を用意したとします。
form_tag下の場合
<%=select_tag :chicken, options_for_select(@chicken_array,selected: @chicken_array[0], disabled: @chicken_array[0]) %>
これで解決します。
ブログ主
こんな感じに。selectedで初期値も設定してます。
そのoptions_for_selectの引数にdisabledを指定してあげるとその要素を無効化できます。
参考 配列・ハッシュから選択肢を生成Railsドキュメント あとブログ主が無知ゆえに沼にはまったことは以下の通り。- 配列の要素をインデックスで示すカタチで指定する必要がある
- 例えば「disabled:”好きな鶏を選んでね”」だとうまくいかない
ブログ主
あともう一つ注意すべきことがあります
<%=select_tag :lesson, options_for_select(@lessons_array),selected: @lessons_array[0], disabled: @lessons_array[0] %>
このようにselect_tag自体の引数に指定してしまうと…
↑このように選択どころかクリックさえできないセレクトボックスになってしまうので注意ですね。
セレクトボックス自体が無効になってるからか…
くるみ
form_for下の場合
<%= form.select :lesson_id, @lesson_array, selected: @lesson_array[0], disabled: @lesson_array[0] %>
form_for下ではこのように指定してあげれば大丈夫でした。
結論:disabledは便利だね
参考になれば幸いです!では⸝⸝- ̫ -⸝⸝