とあるプロダーツプレイヤーの徒然日記

とあるプロダーツプレイヤーが徒然なるままによしなし事をそこはかとなく書きつくろいます

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>

となり、できた!!!と喜びました。

ところで

ところで、とりあえず書いたはいいものの、下記の第三引数って何に使ってるの?と思ったので補足

selectの内部実装

= f.select :prefecture_id, options_for_select(1..200), {ここはselectのオプションpromptやinclude_blankを設定するところっぽい}, { こっちはhtmlのオプションを設定するところっぽい。idやクラスとか }

とのことでした。

まとめ

要は、内部実装見に行けということでした。

以上。

大事なことは繰り返しときます。

selectの内部実装

= f.select :prefecture_id, options_for_select(1..200), {ここはselectのオプションpromptやinclude_blankを設定するところっぽい}, { こっちはhtmlのオプションを設定するところっぽい。idやクラスとか }