【Rails】セレクトボックスにdisabledを適用する方法

Railsのセレクトボックスにdisabledを適用する

どうもおはようポテト(@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で初期値も設定してます。
select_tagメソッドの場合は、options_for_selectメソッドで配列・ハッシュから選択肢を生成してそれを引数に指定する…というのがメジャーなやり方ですが、

その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は便利だね

記事を読んでくれてありがとう

以上、Railsでセレクトボックスにdisabledを適用する方法でした。

参考になれば幸いです!では⸝⸝- ̫ -⸝⸝

コメントを残す

この記事を書いた人
おはようポテトのプロフィール画像
おはようポテト

新卒1年目のひよっこWEBエンジニア。業務ではPHPを触り、プライベートではNext.jsで宅配冷凍弁当の比較サイトWebデザインを楽にするCSSのコピペサイトの開発・運営をしています。お問い合わせはこちらよりどうぞ。