2012-02-17 28 views
6

Tôi đang sử dụng công cụ xác thực trong ứng dụng của mình. Có cách nào để sử dụng thông báo tùy chỉnh khi xác minh không thành công. Devise cung cấp cho tôi thông báo sau khi mật khẩu trống: Password can't be blank, nhưng tôi cần một thư khác. Tôi làm nó như thế nào?Tạo thông báo tùy chỉnh khi xác thực không thành công

Trả lời

22

ActiveRecord en.yml là câu trả lời tôi sẽ đề nghị nếu bạn muốn thay đổi Validation nhắn cho lập mưu

Dưới đây là cách en. yml sẽ trông giống như

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" 

Tôi là dvice bạn xác định theo cách này thay vì tùy đưa ra mô-đun xác nhận

Bởi vì nếu bạn làm theo các cách tiếp cận trên, nó sẽ có thể mà bạn sẽ bỏ qua một xác nhận một địa điểm hoặc hai

cho Ví dụ tôi là loại bỏ các devise trên Module xác nhận và sau đó substitue của riêng bạn trong tài khoản mẫu

sau đó tất cả các xác nhận sẽ làm việc cho nhưng bạn sẽ bỏ lỡ các xác nhận trong Change password

Có bằng kết quả của bạn để đăng nhập mặc dù mật khẩu không bao giờ được cung cấp và không bao giờ được đưa ra

Giữ một vòng lặp của quá

Cheer

Trân

+0

Ở đâu đây? 'config/locals/en.yml'? – ahnbizcad

+0

Bạn có ý gì khi loại bỏ "mô-đun xác thực phát triển ở trên" và tự đặt mô hình của riêng bạn trong Mô hình người dùng? Đầu tiên, không có mô-đun xác thực nào nêu trên. Những gì bạn đã viết ở trên là tệp en.yml, không phải tệp devise.en.yml. Và ngay cả các tập tin devise.en.yml không phải là một mô-đun xác nhận. Làm thế nào bạn có thể đặt mã devise.en.yml vào mô hình Người dùng? Nó giống như một cái chốt hình vuông vào một lỗ tròn. Bạn có ý gì bằng cách "giữ một vòng lặp quá"? Rằng nó sẽ đi vào một vòng lặp vô hạn nếu xác nhận "thay đổi mật khẩu" bị bỏ qua? – ahnbizcad

+0

Một câu hỏi khác: Tôi nghĩ rằng thông báo yml này là tin nhắn chứ không phải xác thực thực tế. Tại sao thay đổi chúng bỏ qua một xác nhận? Có lẽ các chỉnh sửa được đề xuất của tôi không phải là ý của bạn, nhưng dù sao thì nó cũng không rõ ràng. – ahnbizcad

0

Không phải là câu trả lời hoàn chỉnh, nhưng có vẻ như nó sẽ được giải quyết với I18n, với khóa phát sinh hoặc bằng cách ghi đè thông báo lỗi xác thực của bản ghi hoạt động cho mô hình người dùng của bạn.

Đây là câu hỏi tương tự: Devise attributes for i18n?

2

Vui lòng tham khảo URL bên dưới.

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

Nếu người dùng đang đăng nhập, bạn có thể chỉnh sửa tất cả các thông báo lỗi trong devise.en.yml dưới config/locales.

Nếu bạn đang đăng ký, Devise cung cấp các xác thực riêng của nó ra khỏi hộp mà không cần bất kỳ tùy chỉnh nào. Nếu bạn muốn tùy chỉnh nó, bạn có thể chỉnh sửa mô hình User.

Tìm devise :validatable và xóa tùy chọn :validatable. Sau đó, bạn sẽ có thể sử dụng các xác nhận đường ray thông thường. Lưu ý rằng điều này sẽ khiến bạn phải tự mình thực hiện tất cả các xác thực.

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

Một số kiểm chứng thực thông thường:

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

Bạn có thể tùy chỉnh thông điệp devise của bạn từ config/miền địa phương/devise.en.yml nhưng nếu bạn muốn thay đổi để nhắn xác nhận sau đó delete: validatable từ Model. Sau đó, bạn có thể thay đổi thông báo xác thực như trước đây. Ví dụ:

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 
Các vấn đề liên quan