2012-02-17 39 views
15

Hata iletilerini geçersiz kılınma şifreleri denetleyicisi nasıl özelleştirebilirim?Parola değiştirmede hata iletileri nasıl geçersiz kılınır

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 Bu yöntemde kullanılabilir, ancak böyle Email not found ve Email can't be blank gibi varsayılan mesajları içerir. Bu mesajları uyarlamam lazım. Kullanıcı modelimden :validatable'u kaldırmaya çalıştım ve özel onaylayıcıları ekledim ancak bu yalnızca Devise :: RegistrationsController'dan türetilen özel kayıt denetleyicim için çalışıyor ve özel parola denetleyicisi için değil.

Herhangi bir çözüm var mı?

+0

Bunu çözdü mü? –

+0

Bu eski olduğunu biliyorum, ama daha genel ve temiz bir yaklaşım için [bu yanıtı] (http://stackoverflow.com/a/18578028/1964165) kontrol edin. – akhanubis

cevap

7

Devise mesajları Ben geçersiz kılmak için çalışıyoruz hangi mesajı emin değilim config/yerel/devise.en.yml

bulunur, ama bunu yapmak istediğiniz yer zaten.

+3

Geçersiz kılmak istediğim mesajlar burada yok. Değiştirmek istediğim bu mesaj, doğrulama başarısız olduğunda kullanılan varsayılan mesajlardır ve 'config/locales/devise.en.yml', bilgi mesajlarını içerir. – RomanKapitonov

+0

Bu mesajlar gerçekten orada değil, ama onları ekleyebilir ve işe yarayacak. Yukarıdaki cevabımı görün. – Justin

0

İdeal, ama aşağıdaki çalışma var ettik this related ticket dayalı değil (ı kesmek biraz biliyorum ki, ama o inşaat):

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 

adlı bir modülde koy bunlar varsayılan olarak orada değil, sizin /app/helpers dizinde devise_helper.rb

15

cevap config/yerel ayarları/devise.en.yml değiştirmektir ama ayar eklemek gerekir. Bunun için

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

Kredi benim için hemen hemen aynı question cevap Vimsha gider.

+1

Hata mesajında, minimum değeri kodlamak yerine% {count} kullanmalısınız. sayım, değer validatoru tarafından I18n.t'ye geçirilir ve bu nedenle her zaman düzenleme ayarıyla eşleşecektir. – ReggieB

0

sizin routes.rb Bu ekle

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

veya

devise_for :users, :controllers => { :passwords => 'passwords' } 
İlgili konular