ruby on railsでselectのクラスが設定できない!
概要
railsでフォームを作りこむためにslimのコードを書いていたら、selectだけうまくクラスを設定できない。 とても困ったので、備忘録として。
アホだったので
select - リファレンス - - Railsドキュメントに載っている通り、
= f.select :prefecture_id, options_for_select(1..200), autofocus: 'true', class: 'form-control'
とやろうとしたが、生成されたコードは
<select name="sample[prefecture_id]" id="sample_prefecture_id"> <option value="1">1</option> ・・・ <option value="200">200</option> </select>
えー、出来無いじゃん。と思って
= select_tag "sample[prefecture_id]", options_for_select(1..200), autofocus: 'true', class: 'form-control'
と、無理やりselect_tagを使って対応していたが、どうも気持ち悪い。。。
正解
調べた結果、広い世界には同じような人がいるらしく
Can't add class on select form helper in Rails 4 - Stack Overflow
Can'tだったらしい。 とりあえず、真似して書いてみる
= f.select :prefecture_id, options_for_select(1..200), {}, { autofocus: 'true', class: 'form-control'}
生成されたhtml
<select name="sample[prefecture_id]" id="sample_prefecture_id" autofocus="autofocus" class="form-control parsley-error" > <option value="1">1</option> ・・・ <option value="200">200</option> </select>
となり、できた!!!と喜びました。
ところで
ところで、とりあえず書いたはいいものの、下記の第三引数って何に使ってるの?と思ったので補足
= f.select :prefecture_id, options_for_select(1..200), {ここはselectのオプションpromptやinclude_blankを設定するところっぽい}, { こっちはhtmlのオプションを設定するところっぽい。idやクラスとか }
とのことでした。
まとめ
要は、内部実装見に行けということでした。
以上。
大事なことは繰り返しときます。
= f.select :prefecture_id, options_for_select(1..200), {ここはselectのオプションpromptやinclude_blankを設定するところっぽい}, { こっちはhtmlのオプションを設定するところっぽい。idやクラスとか }