...

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

以上となります。

最後まで読んでいただきありがとうございました!では⸝⸝- ̫ -⸝⸝

参考になったらシェアしよう

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA