2012-06-12 29 views
5

Làm cách nào để tùy chỉnh thông báo lỗi cho các tùy chọn phụ khi xác thực tính số trên một trường trong mô hình ActiveRecord?Làm thế nào để tùy chỉnh thông báo lỗi để xác nhận các tùy chọn con số?

Ví dụ:

validates :month, :numericality => { 
    :greater_than_or_equal_to => 1, 
    :less_than_or_equal_to => 12 
} 

Trong trường hợp này nếu thuộc tính 'tháng' là hơn 12, tôi muốn cung cấp thông báo lỗi tùy chỉnh thay vì mặc định "phải nhỏ hơn hoặc bằng 12". Làm thế nào để đạt được điều này?

Trả lời

8

Nếu bạn không muốn sử dụng trình xác thực tùy chỉnh, bạn có thể sử dụng tệp en.yml thay thế. Giả sử "bài đăng" là tên mẫu của bạn, điều này cung cấp các ví dụ về các tin nhắn theo độ tuổi cụ thể, các tin nhắn sau cụ thể và các thông báo chung (tất cả các mô hình).

en: 
    activerecord: 
    errors: 
     models: 
     post: 
      attributes: 
      age: 
       less_than_or_equal_to: "Age-specific error" # Applies only to post.age 
      less_than_or_equal_to: "Post-specific error" # Applies to all other fields for a post 
     messages: 
     less_than_or_equal_to: "Generic error" # Applies to all other models 
+0

Nhưng điều đó có nghĩa là tôi không thể tùy chỉnh nó trên nhiều lần xuất hiện của 'less_than_or_equal_to' phải không ?. – Vignesh

+0

Đã cập nhật để hiển thị nhiều lần xuất hiện –

+0

Còn về only_integer thì sao? Khóa đó dường như không hoạt động, mặc dù: greater_than hoạt động khi được lồng trong cùng một vị trí. EDIT (tức là TRẢ LỜI): Tìm thấy nó trong [mã nguồn] (https://github.com/rails/rails/blob/3-2-stable/activemodel/lib/active_model/validations/numericality.rb#L34): Đó là 'not_an_integer' –

0

Nếu bạn muốn tùy chỉnh các thông điệp báo lỗi tùy thuộc vào mô hình mà bạn có thể sử dụng cú pháp sau:

validates_numericality_of :month, 
    greater_than_or_equal_to: 1, 
    less_than_or_equal_to: 12, 
    message: "My custom error message" 

Bạn cũng có thể sử dụng cú pháp này để tùy chỉnh các thông báo lỗi dựa trên các điều kiện cụ thể:

validates_numericality_of :month, 
    greater_than_or_equal_to: 1, 
    message: "Too small" 

validates_numericality_of :month, 
    less_than_or_equal_to: 12, 
    message: "Too big 
Các vấn đề liên quan