2012-04-26 24 views
9

Tôi có trình xác thực tùy chỉnh và tôi đang cố gắng xuất thông báo lỗi khi không thành công nhưng không thể làm như vậy. Ai đó có thể vui lòng cho tôi biết nếu tôi đang làm điều này ở đúng nơi.Thêm thông báo lỗi vào trình xác thực tùy chỉnh

class User < ActiveRecord::Base 
    self.table_name = "user" 

    attr_accessible :name, :ip, :printer_port, :scanner_port 

    validates :name,  :presence => true, 
          :length => { :maximum => 75 }, 
          :uniqueness => true       

    validates :ip,   :length => { :maximum => 75 }, 
          :allow_nil => true  

    validates :printer_port, :presence => true, :if => :has_association? 

    validates :scanner_port, :presence => true, :if => :has_association?   

    def has_association? 
    ip != nil 
    end 
end 

tôi đã có nó như sau:

validates :printer_port, :presence => true, :message => "can't be blank", :if => :has_wfm_association? 

Nhưng đã nhận được một lỗi

Unknown validator: 'MessageValidator' 

Và khi tôi đã cố gắng để đưa thông điệp vào cuối validator dấu phẩy ngăn cách has_association? quay dấu hỏi và dấu phẩy cam

Trả lời

17

Các messageif thông số nên được bên trong một hash cho presence:

validates :printer_port, :presence => {:message => "can't be blank", :if => :has_wfm_association?} 

Điều này là do bạn có thể tải nhiều kiểm chứng thực trong một dòng duy nhất:

validates :foo, :presence => true, :uniqueness => true 

Nếu bạn cố gắng thêm thư vào cách bạn đã làm hoặc điều kiện if, Rails sẽ không biết xác thực nào để áp dụng thư/điều kiện. Vì vậy, thay vào đó, bạn cần phải đặt thông báo cho mỗi xác thực:

validates :foo, :presence => {:message => "must be present"}, 
       :uniqueness => {:message => "must be unique"} 
+0

Tôi không cần phải bao gồm tuyên bố đúng sự hiện diện? Khi tôi làm điều này? và kết thúc của băm đang chạy cùng nhau và cả hai chuyển sang màu cam. – Jay

+0

Chỉ cần thiết để đặt không gian, nhờ sự giúp đỡ của bạn Dylan rất nhiều đánh giá cao :) – Jay

+0

Làm cách nào để chấp nhận? – Jay