2012-02-17 20 views
15

Come posso personalizzare i messaggi di errore del controller delle password divise ignorato?Come sovrascrivere i messaggi di errore di devision sulla modifica della password

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 è disponibile in questo metodo ma contiene messaggi predefiniti, come Email not found e Email can't be blank. ho bisogno di personalizzare questi messaggi Ho provato a rimuovere :validatable dal mio modello utente e aggiungere validatori personalizzati, ma funziona solo per il mio controller di registrazioni personalizzato derivato da Devise :: RegistrationsController e non per il controller di password personalizzate.

C'è qualche soluzione?

+0

avete risolto questo? –

+0

So che questo è vecchio, ma controlla [questa risposta] (http://stackoverflow.com/a/18578028/1964165) per un approccio più generico e pulito. – akhanubis

risposta

7

messaggi Devise si trovano in config/locali/devise.en.yml

Non sono sicuro di quale messaggio si sta cercando di ignorare, ma che è dove si vuole farlo.

+3

I messaggi che voglio ignorare non si trovano lì. Questi messaggi che voglio cambiare sono i messaggi predefiniti usati quando la validazione fallisce e 'config/locales/devise.en.yml' contiene messaggi di informazione elaborati. – RomanKapitonov

+0

Questi messaggi non sono effettivamente lì, ma puoi aggiungerli e funzionerà. Vedi la mia risposta sopra. – Justin

0

Non è l'ideale, ma sulla base di this related ticket ho ottenuto che funziona con il seguente (che so è un po 'di un hack, ma funziona):

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 

mettere questo in un modulo chiamato devise_helper.rb nella directory /app/helpers

15

La risposta è di modificare config/locali/devise.en.yml ma è necessario aggiungere le impostazioni, non sono lì per impostazione predefinita.

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

Credito per questo va a Vimsha che ha risposto praticamente la stessa question per me.

+1

È necessario utilizzare% {count} nel messaggio di errore anziché codificare il valore minimo. il conteggio viene passato a I18n.t dal validatore di intervallo e pertanto corrisponderà sempre alle impostazioni di elaborazione. – ReggieB

0

Aggiungi questo al vostro routes.rb

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

o

devise_for :users, :controllers => { :passwords => 'passwords' } 
Problemi correlati