2012-02-17 24 views
15

Làm cách nào để tùy chỉnh thông báo lỗi bộ điều khiển mật khẩu chia sẻ ghi đè?Cách ghi đè thông báo lỗi khi thay đổi mật khẩu

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 có sẵn trong phương pháp này nhưng nó chứa thông điệp mặc định như Email not foundEmail can't be blank. tôi cần tùy chỉnh tin nhắn này. Tôi đã cố gắng để loại bỏ :validatable từ mô hình người dùng của tôi và thêm trình xác nhận tùy chỉnh nhưng điều này chỉ hoạt động cho bộ điều khiển đăng ký tùy chỉnh của tôi có nguồn gốc từ Devise :: RegistrationsController và không cho bộ điều khiển mật khẩu tùy chỉnh.

Có giải pháp nào không?

+0

Cậu giải quyết này? –

+0

Tôi biết điều này là cũ, nhưng hãy kiểm tra [câu trả lời này] (http://stackoverflow.com/a/18578028/1964165) để có cách tiếp cận chung và sạch hơn. – akhanubis

Trả lời

7

điệp lập mưu được đặt tại config/miền địa phương/devise.en.yml

Tôi không chắc chắn mà thông điệp mà bạn đang cố gắng để ghi đè lên, nhưng đó là nơi bạn muốn làm điều đó.

+3

Các thư tôi muốn ghi đè không được đặt ở đó. Những thông báo tôi muốn thay đổi là các thông báo mặc định được sử dụng khi xác nhận không thành công và 'config/locales/devise.en.yml' chứa thông báo thông tin phát sinh. – RomanKapitonov

+0

Các thư đó thực sự không có trong đó, nhưng bạn có thể thêm chúng và nó sẽ hoạt động. Xem câu trả lời của tôi ở trên. – Justin

0

Đó không phải là lý tưởng, nhưng dựa trên this related ticket tôi đã nhận nó làm việc như sau (mà tôi biết là một chút của một hack, nhưng nó hoạt động):

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 

Đặt điều này trong một module gọi devise_helper.rb trong thư mục /app/helpers bạn

15

Câu trả lời là để sửa đổi config/miền địa phương/devise.en.yml nhưng bạn phải thêm các thiết lập, họ không có theo mặc định.

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

Khoản tín dụng cho Vimsha trả lời hầu như cùng một số question cho tôi.

+1

Bạn nên sử dụng% {count} trong thông báo lỗi thay vì mã hóa cứng giá trị tối thiểu. số đếm được chuyển đến I18n.t bởi trình xác nhận phạm vi và do đó sẽ luôn khớp với cài đặt phát sinh. – ReggieB

0

Thêm phần này vào routes.rb của bạn

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

hoặc

devise_for :users, :controllers => { :passwords => 'passwords' } 
Các vấn đề liên quan