Definiowanie klas za pomocą opcji :html => {:class => '...'}
zastępuje wszelkie klasy dodane przez domyślny program budujący. Możesz jednak dołączyć klasy CSS do bloku bez przesłonięcia tych klas.
Przy pomocy pomocnika form_for
:class
będzie ciągiem, jeśli nie zostanie ustawione inaczej. Zwróć uwagę na pole wiodące podczas dodawania.
<%= form_for @model do |f| %>
<% f.options[:html][:class] << ' form-horizontal' %>
<%# ... %>
<% end %>
<form class="edit_model form-horizontal">
Jeśli używasz simple_form_for
pomocnika, options[:html][:class]
będzie tablicą, i nie potrzeba dodatkowego miejsca lidera (chociaż to nie boli).
<%= simple_form_for @model do |f| %>
<% f.options[:html][:class] << 'form-horizontal' %>
<%# ... %>
<% end %>
<form class="simple_form edit_model form-horizontal">
Jeśli używasz symbolu zamiast modelu form_for
nie ustawi klasę i options[:html][:class]
będzie nil
w bloku. Ale jeśli to robisz, to i tak nie masz modelu, który mógłby być nowy lub utrwalony.
<%= form_for :model do |f| %>
<% f.options[:html][:class] << ' form-horizontal' %>
<%# ... %>
<% end %>
NoMethodError: undefined method `<<' for nil:NilClass
Piękno kreatora formularzy polega na tym, że automatycznie przełącza się między klasami edit_model i new_model.Chciałbym elegancki sposób, aby to zrobić bez konieczności umieszczania obiektu wewnątrz instrukcji if, która wykrywa, czy jest to nowy obiekt. – Evan