以下のようにrailsでselectにclass設定しようとしたが、生成されたHTMLを見てみると、classが設定できていなかった。
<%= form_for @user do |f| %>
<%= f.select :person_id,Person.all.collect { |p| [ p.name, p.id ] }, class: "form-control %>
<% end %>
対処法
下記で出来ます。
<%= form_for @post do |f| %>
<%= f.select :person_id,Person.all.collect { |p| [ p.name, p.id ] }, {}, {class: 'form-control'} %>
<% end %>
ソースコードを調べて見ると、option(:include_blankや:prompt)は第3引数に設定し、html_options(classやstyle)は第4引数に設定するようでした。
なので、html系のオプションだけ設定したい場合は、第3引数に空ハッシュを渡し、第4引数にhtml系のオプションを設定します。
メソッド定義
def select(method, choices = nil, options = {}, html_options = {}, &block)
http://railsdoc.com/references/select
このドキュメントの説明だけは分からなかった。optionsには、include_blankとpromptしか設定できないようです。
include_blankやpromptも設定したいこのように。
<%= form_for @post do |f| %>
<%= f.select :person_id,Person.all.collect { |p| [ p.name, p.id ] }, {include_blank: true}, {class: 'form-control'} %>
<% end %>
f.collection_selectなども同様に
<%= form_for @post do |f| %>
<%= f.collection_select :person_id, Author.all, :id, :name_with_initial, {}, {class: 'form-control'} %>
<%= f.submit %>
<% end %>