は、デフォルトのビルダーによって追加されたクラスを上書きします。ただし、これらのクラスをオーバーライドしないで、ブロック内にCSSクラスを追加することはできます。
form_for
ヘルパーの場合、:class
は、そうでない場合は文字列になります。追加する際の先頭のスペースに注意してください。
<%= form_for @model do |f| %>
<% f.options[:html][:class] << ' form-horizontal' %>
<%# ... %>
<% end %>
<form class="edit_model form-horizontal">
あなたがsimple_form_for
ヘルパーを使用している場合、options[:html][:class]
は配列になります、と(それは悪くはないが)、あなたは余分な先頭のスペースを必要としません。
<%= simple_form_for @model do |f| %>
<% f.options[:html][:class] << 'form-horizontal' %>
<%# ... %>
<% end %>
<form class="simple_form edit_model form-horizontal">
あなたはシンボルの代わりに、モデルを使用している場合、form_for
は、クラスを設定していないだろう、とoptions[:html][:class]
はブロックにnil
なります。しかし、これをやっているのであれば、とにかく新しいモデルや永続するモデルはありません。
<%= form_for :model do |f| %>
<% f.options[:html][:class] << ' form-horizontal' %>
<%# ... %>
<% end %>
NoMethodError: undefined method `<<' for nil:NilClass
フォームビルダの美しさは、edit_modelクラスとnew_modelクラスを自動的に切り替えることです。私は、それが新しいオブジェクトであるかどうかを検出するifステートメントの中にオブジェクトを置かなくても、これを行うための洗練された方法を望みます。 – Evan