Definición de clases a través de la opción :html => {:class => '...'}
anula cualquier clases añadidas por el constructor por defecto. Sin embargo, puede agregar clases de CSS dentro del bloque sin anular esas clases.
Con el form_for
ayudante, el :class
será una cadena si no se establece de otra manera. Tenga en cuenta el espacio inicial al agregar.
<%= form_for @model do |f| %>
<% f.options[:html][:class] << ' form-horizontal' %>
<%# ... %>
<% end %>
<form class="edit_model form-horizontal">
Si está utilizando el ayudante simple_form_for
, options[:html][:class]
habrá una matriz, y que no es necesario el espacio inicial extra (aunque no hace daño).
<%= simple_form_for @model do |f| %>
<% f.options[:html][:class] << 'form-horizontal' %>
<%# ... %>
<% end %>
<form class="simple_form edit_model form-horizontal">
Si utiliza un símbolo en lugar de un modelo, form_for
no establecerá la clase, y options[:html][:class]
habrá nil
en el bloque. Pero si estás haciendo esto, no tienes un modelo que sea nuevo o que persista de todos modos.
<%= form_for :model do |f| %>
<% f.options[:html][:class] << ' form-horizontal' %>
<%# ... %>
<% end %>
NoMethodError: undefined method `<<' for nil:NilClass
La belleza del generador de formularios es que cambia automáticamente entre las clases edit_model y new_model.Me gustaría una forma elegante de hacerlo sin tener que colocar el objeto dentro de una declaración if que detecte si es un objeto nuevo o no. – Evan