LoginSignup
100
78

More than 5 years have passed since last update.

railsでf.selectにclassを設定する

Posted at

以下のように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 %>
100
78
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
100
78