2012-02-17 16 views
6

Estoy utilizando el dispositivo como motor de autenticación en mi aplicación. ¿Hay alguna forma de utilizar mensajes personalizados cuando falla la validación de diseño? Devise me proporciona el siguiente mensaje cuando la contraseña está en blanco: Password can't be blank, pero necesito otro mensaje. ¿Cómo puedo hacerlo?Diseñe mensajes personalizados cuando la validación falla

Respuesta

22

ActiveRecord en.yml es la respuesta que yo sugeriría que si desea cambiar el Mensaje de validación para Diseñar

Así es como la linea. yml debe verse como

en: 
    activerecord: 
    errors: 
     models: 
     user: 
      attributes: 
      email: 
       blank: "Please Specify an Email id" 
       taken: "Please use a different Email id" 
       invalid: "Please Specify a valid Email id" 
      password: 
       blank: "Please Specify a Password" 
       confirmation: "Password does not match" 
      password_confirmation: 
       blank: "Please Specify a Password Confirmation" 
      first_name: 
       blank: "Please Specify First Name" 
      last_name: 
       blank: "Please Specify Last Name" 
     pdf: 
      attributes: 
      name: 
       blank: "Please Specify name to PDF" 
       taken: "Please use different name for PDF" 
      attachment: 
       blank: "Please Upload a PDF Attachment" 
     data_element: 
      attributes: 
      name: 
       blank: "Please give Element a desired name" 
       taken: "Already Created Element with given name" 
      color: 
       blank: "Please assign a color to Element" 
     template: 
      attributes: 
      name: 
       blank: "Please Specify a Name" 
       taken: "Please use a different name" 

I a que DVICE para definir de esta manera en lugar de la personalización de idear módulo de validación

Porque si sigue el enfoque anterior, sería posible que usted será ignorado durante la validación de un lugar o dos

Por ejemplo, yo la quito el legado anterior módulo de validación y luego substitué su cuenta en usuario Modelo

entonces toda la validación funcionaría para sino que se perdería la validación en Cambiar contraseña

Hay por resultado el hacer login a pesar de que la contraseña no se suministra y nunca dado

Mantenga un bucle de eso también

Cheer

Saludos

+0

¿DÓNDE es esto? 'config/locals/en.yml'? – ahnbizcad

+0

¿Qué quiere decir con deshacerse del "módulo de validación de diseño anterior" y sustituir el suyo en el Modelo de usuario? En primer lugar, no existe un módulo de validación de diseño anterior. Lo que escribió arriba es el archivo en.yml, no el archivo devise.en.yml. E incluso el archivo devise.en.yml no es un módulo de validación. ¿Cómo se puede poner el código devise.en.yml en el modelo de Usuario? Eso es como una estaca cuadrada en un agujero redondo. ¿Qué quiere decir con "mantener un ciclo de eso también"? ¿Que pasará a un bucle infinito si se omite la validación de "cambio de contraseña"? – ahnbizcad

+0

Otra pregunta: pensé que estos mensajes yml eran mensajes, no validaciones reales. ¿Por qué cambiarlos eludiría una validación? Tal vez mis ediciones sugeridas no son lo que querías decir, pero de todos modos no estaba claro antes. – ahnbizcad

0

No es una respuesta completa, pero parece que debería resolverse con I18n, ya sea con las claves internas del diseño o anulando los mensajes de error de validación del registro activo para su modelo de usuario.

Aquí hay una pregunta similar: Devise attributes for i18n?

2

Consulte la siguiente URL.

http://railscasts.com/episodes/210-customizing-devise?view=asciicast

Si el usuario inicia sesión en, se pueden editar todos los mensajes de error en devise.en.yml bajo config/locales.

Si se registra, Devise proporciona sus propias validaciones listas para usar sin ninguna personalización. Si desea personalizarlo, puede editar el modelo User.

Encuentra devise :validatable y elimina la opción :validatable. Después de lo cual, podrá usar las validaciones de rieles habituales. Tenga en cuenta que esto hará que tenga que hacer todas las validaciones usted mismo.

validates_presence_of :password, :message=>"Your custom error message!"

Algunas validaciones habituales:

validates_confirmation_of :password 
    validates_presence_of :password, :on => :create 
    validates_presence_of :email 
    validates_uniqueness_of :email 
0

Puede personalizar sus mensajes Idear de config/lugares/devise.en.yml pero si desea cambiar a continuación mensaje de validación eliminar: validable desde Model. Luego puede cambiar un mensaje de validación como antes. Por ejemplo:

validates_uniqueness_of :email,  :case_sensitive => false, :allow_blank => true, :if => :email_changed? 
validates_format_of :email, :with => Devise.email_regexp, :allow_blank => true, :if => :email_changed? 

validates_presence_of :password, :on=>:create 
validates_confirmation_of :password, :on=>:create 
validates_length_of :password, :within => Devise.password_length, :allow_blank => true 
Cuestiones relacionadas