2011-04-30 15 views
9

Estoy usando el dispositivo para manejar la autenticación. En general, me gusta, pero me gustaría personalizar un poco la visualización del error. En este momento tengo lo siguiente en mi opinión.Personalización de mensajes de error en Rails 3?

<div class="field <% if resource.errors[:email].present? %>error<% end %>"> 
    <%= f.label :email, "Email:" %><br /> 
    <% if resource.errors[:email].present? %> 
    <ul> 
     <% resource.errors[:email].each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
    </ul> 
    <% end %> 
    <%= f.text_field :email, :class => "text" %> 
</div> 

Pero cuando hay un problema con el correo electrónico, el mensaje que se muestra es la siguiente: is invalid. No es muy fácil de usar, pero no puedo encontrar dónde se está estableciendo este mensaje. No parece estar en devise.en.yml, pero tal vez estoy pasando por alto algo.

alguna idea de dónde puedo personalizar los mensajes de error?

Gracias!

Respuesta

8

Todas estas validaciones se definen en el módulo validations, y utilizan los mensajes de error Rails predeterminados.

Puede anular estos en su modelo.

validates_format_of :email, :with=>email_regexp, :allow_blank => true, :message=>"new error message here" 
+2

¡Gracias! También vale la pena señalar que para que esto funcione, debes eliminar ': validatable' del modelo y transferir todas las validaciones al modelo. –

+1

Los rieles manera de llevarla a cabo sin tener que volver a escribir Idear validaciones es [aquí] (http://stackoverflow.com/a/18578028/1964165) – akhanubis

28

Puede configurar los mensajes de error en los locales presentar en: /config/locales/devise.en.yml

que debería haber algo así como debajo de código y que se puede modificar fácilmente a su gusto:

en: 
    errors: 
    messages: 
     not_found: "not found" 
     already_confirmed: "was already confirmed" 
     not_locked: "was not locked" 

    devise: 
    failure: 
     unauthenticated: 'You need to sign in or sign up before continuing.' 
     unconfirmed: 'You have to confirm your account before continuing.' 
     locked: 'Your account is locked.' 
     invalid: 'OH NOES! ERROR IN TEH EMAIL!' 
     invalid_token: 'Invalid authentication token.' 
     timeout: 'Your session expired, please sign in again to continue.' 
     inactive: 'Your account was not activated yet.' 
    sessions: 
     signed_in: 'Signed in successfully.' 
     signed_out: 'Signed out successfully.' 

Para una explicación más detallada, consulta este url (con capturas de pantalla). La sección Customizing Error Messages, en el artículo.

+1

Gracias por la sugerencia. Como noté en mi pregunta original, los mensajes de error que estoy viendo no se encuentran en el archivo de configuraciones regionales. Sin embargo, la respuesta de RobZolkos me ayudó. ¡Gracias! –

9

Si desea cambiar los mensajes para las validaciones de aduana añadidos por dispositivos, compruebe si Christian's answer.

De lo contrario, si la validación que desea personalizar es una validación estándar como el formato de correo electrónico, no necesita eliminar las validaciones de Devise y reemplazarlas por las suyas. Una mejor forma de manejar esto es hacer uso de la precedencia predeterminada de los mensajes de error enumerados en el Rails guides y anular el mensaje de error para un campo en particular y una validación particular.

Para esta pregunta en particular, la clave que es necesario agregar en config/locales/en.yml con el fin de cambiar is invalid con un mensaje personalizado para los errores de correo es activerecord.errors.models.user.attributes.email.invalid (donde user es el nombre del modelo):

en: 
    activerecord: 
    errors: 
     models: 
     user: 
      attributes: 
      email: 
       invalid: "custom invalid message" 

Rails buscará un mensaje para mostrar para una validación en el siguiente orden:

activerecord.errors.models.[model_name].attributes.[attribute_name] 
activerecord.errors.models.[model_name] 
activerecord.errors.messages 
errors.attributes.[attribute_name] 
errors.messages 
Cuestiones relacionadas