PIYO - Tech & Life -

form_forのf.selectのhtml_options

html Rails

Railsのフォームで使うform_for。レイアウト調整のために各種コントロールにもclassを設定しているのに、あるフォームのドロップダウンリストにスタイルが適用されていないことに気がついた。なんだろうと思ってリファレンスを見てみると、f.selectのシグネチャはこんなんだった。

select(method, choices = nil, options = {}, html_options = {}, &block)

ちなみにfActionView::Helpers::FormBuilderというものらしい。

で、僕が書いていたフォームはこうなっていた(f.selectの部分を抜粋)。

= form_for (...) do |f|
  .form-group
    = f.label :my_option, "選択肢"
    = f.select :my_option, ["hoge", "fuga", "piyo"], class: "form-control"

こう見ると第3引数にクラス指定のハッシュを渡していることがわかるが、先ほどの定義をみればわかる通り、HTML関係のオプションは第4引数に渡さなければならない。

つまり、指定の仕方が間違っていたということだ。本当は次のようにしなければいけなかった。

= form_for (...) do |f|
  .form-group
    = f.label :my_option, "選択肢"
    = f.select :my_option, ["hoge", "fuga", "piyo"], {}, class: "form-control"

第3引数に空ハッシュを渡し、class: "form-control"が第4引数として扱われるようにすればいい。

しっかし、この手の引数ネタ、前も引っかかったなー。

Railsのredirect_toでちょっとだけはまる - ぴよログ