2012-02-17 7 views
15

¿Cómo puedo personalizar los mensajes de error el controlador de contraseñas de divisa anulado?Cómo anular el diseño de mensajes de error en el cambio de contraseña

class PasswordsController < Devise::PasswordsController 
    def create 
    self.resource = resource_class.send_reset_password_instructions(params[resource_name]) 

    if resource.errors.empty? 
     set_flash_message(:notice, :send_instructions) if is_navigational_format? 
     respond_with resource, :location => home_path 
    else 
     binding.pry 
     flash[:devise_password_error] = (resource.errors.map do |key, value| 
     value.capitalize 
     end).flatten.join('|') 
     redirect_to home_path and return 
    end 
    end 
    def edit 
    self.resource = resource_class.new 
    resource.reset_password_token = params[:reset_password_token] 
    end 
end 

resource.errors está disponible en este método, pero contiene mensajes por defecto como Email not found y Email can't be blank. Necesito personalizar estos mensajes. Intenté eliminar :validatable de mi modelo de usuario y agregar validadores personalizados, pero esto funciona solo para mi controlador de registros personalizado derivado de Devise :: RegistrationsController y no para el controlador de contraseñas personalizadas.

¿Hay alguna solución?

+0

los solucionaron esto? –

+0

Sé que esto es antiguo, pero consulte [esta respuesta] (http://stackoverflow.com/a/18578028/1964165) para obtener un enfoque más genérico y limpio. – akhanubis

Respuesta

7

mensajes Idear se encuentran en config/lugares/devise.en.yml

No estoy seguro de cuál es el mensaje que está tratando de reemplazar, pero eso es en la que desea hacer eso.

+3

Los mensajes que deseo sobrescribir no se encuentran allí. Estos mensajes que deseo cambiar son los mensajes predeterminados que se usan cuando la validación falla y 'config/locales/devise.en.yml' contiene mensajes de información. – RomanKapitonov

+0

Esos mensajes no están ahí, pero puede agregarlos y funcionará. Ver mi respuesta arriba. – Justin

0

No es ideal, pero basado en this related ticket Tengo que trabajar con lo siguiente (que sé que es un poco de un truco, pero funciona):

module DeviseHelper 
    def devise_error_messages! 
    resource.errors.full_messages.map { |msg| msg == 'Email not found' ? 'The email address you entered could not be found. Please try again with other information.' : msg }.join('<br/>') 
    end 
end 

poner esto en un módulo llamado devise_helper.rb en su directorio /app/helpers

15

La respuesta es modificar config/lugares/devise.en.yml pero hay que añadir los ajustes, no hay por defecto.

en: 
    activerecord: 
    errors: 
     models: 
     user: 
      attributes: 
      password: 
       confirmation: "does not match" 
       too_short: "is too short (minimum is %{count} characters)" 

de crédito para este va a Vimsha que respondió prácticamente el mismo question para mí.

+1

Debe usar% {count} en el mensaje de error en lugar de codificar el valor mínimo. count pasa a I18n.t por el validador de rango, y por lo tanto siempre coincidirá con la configuración del dispositivo. – ReggieB

0

Agregue esto a su routes.rb

devise_for :users, controllers: { passwords: 'passwords' } 

o

devise_for :users, :controllers => { :passwords => 'passwords' } 
Cuestiones relacionadas