7

Estoy usando la gema simple_form. Quiero personalizar el mensaje de error que se muestra cuando un usuario no valida las validaciones. ¿Cómo puedo lograr esto?Personalizar el mensaje de error con simple_form

+1

¿Desea personalizar el mensaje de error o el estilo del mensaje de error se ha disociado? – rubyprince

+0

inicialmente quise decir el contenido del mensaje de error, pero también me interesaría personalizar el estilo. Perdón por no ser claro. –

Respuesta

3

Puede cambiar fácilmente el mensaje de error predeterminado en el archivo de traducción, que se encuentra en config/locales/simple_form.en.yml.

En el inicializador específico, config/initializers/simple_form.rb puede anular las opciones predeterminadas de cómo se genera el html.

Espero que esto ayude.

Para completar, me gustaría añadir que formtastic es una opción más fácil para empezar, ya que tiene un diseño predeterminado. Me gusta simple_form mucho, pero no ofrece ningún formato fuera de la caja, pero esa es su intención. Con Formtastic es muy difícil (imposible) cambiar el html generado, y con simple_form puedes moldear completamente el html generado a tu gusto. Esto es especialmente útil si tiene un diseñador, y los formularios que genera deben generar el mismo html. Entonces, si estás empezando, formtastic te dará resultados más agradables más rápido. También tenga en cuenta que es bastante fácil de cambiar, porque la sintaxis es casi idéntica.

+0

¿cuál es la sintaxis para cambiar los mensajes de error predeterminados en 'simple_form.en.yml'? ¿Qué sucede si tiene dos validaciones para un atributo, como ': presence => true' y': format => ... '? ¿cómo proporcionarías diferentes mensajes para cada uno? –

+0

Los mensajes de validación estándar no tienen nada que ver con simple_form, pero es ActiveRecord estándar. O declaras explícitamente el mensaje en la validación o puedes consultar https://github.com/svenfuchs/rails-i18n donde se definen los mensajes estándar (y cómo sobrescribirlos). – nathanvda

+0

¿Hay alguna manera de configurar simple_form para vincular etiquetas y mensajes de error con el registro activo predeterminado i18n yaml? – Matthias

15
  1. Se puede declarar el contenido del mensaje error en su modelo:

    validates_length_of :name, :minimum => 5, :message => "blah blah blah" 
    
  2. Puede establecer id o class para su etiqueta error:

    <%= f.input :name, :error_html => { :id => "name_error"} %> 
    

    A continuación, puede usar CSS para el diseño.

  3. Y puede utilizar

    <%= f.error :name, :id => "name_error" %> 
    

    y obtendrá

    <span class="error" id="name_error">is too short (minimum is 5 characters)</span> 
    
5

No sé si es diferente de la gema simple_form.

Para que se modifique el contenido de los mensajes de error, puede utilizar el atributo :message en el modelo.

class User < ActiveRecord::Base 
    validates :email, {:presence => true, :message => "is not filled up."} 
end 

Ahora el mensaje de validación será Email is not filled up. Si desea que el nombre de campo también ser cambiado (Email a E-mail address algo por el estilo), el enfoque actual es definirlo en locales.rb archivo así

# config/locales/en.yml 
en: 
    activerecord: 
    attributes: 
     user: 
     email: "E-mail address" 

Ver link para obtener detalles sobre locales. Otro enfoque es definir en el modelo, los atributos humanizados como este:

class User < ActiveRecord::Base 
    validates :email, {:presence => true, :message => "is not filled up."} 
    HUMANIZED_ATTRIBUTES = { 
    :email => "E-mail address", 
    ...(other fields and their humanized names) 
    ... 
    } 

    def self.human_attribute_name(attr, options={}) 
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super 
    end 

end 

Para personalizar el estilo del mensaje de validación tendremos que editar el estilo de #errorExplanation y .fieldWithErrors, en el scaffold.css hoja de estilo.

Cuestiones relacionadas