2008-09-19 11 views
12

Trong mô hình của tôi, tôi có:Làm cách nào để viết phương thức xác thực tùy chỉnh với các tham số cho mô hình ActiveRecord của tôi?

validate :my_custom_validation 

def my_custom_validation 
errors.add_to_base("error message") if condition.exists? 
end 

Tôi muốn thêm một số thông số để mycustomer vaildation như vậy:

validate :my_custom_validation, :parameter1 => x, :parameter2 => y 

Làm thế nào để viết hàm mycustomvalidation để giải thích cho các thông số?

Trả lời

6

Trình xác thực thường có tham số mảng cho biết, trước tiên, các trường để xác thực và cuối cùng (nếu có) một băm với các tùy chọn. Trong ví dụ của bạn:

:my_custom_validation, parameter1: x, parameter2: y 

: my_custom_validation sẽ là một tên trường, trong khi argument1: x, argument2: y sẽ là một băm:

{ parameter1: x, parameter2: y} 

Vì vậy, bạn muốn làm điều gì đó như:

def my_custom_validation(*attr) 
    options = attr.pop if attr.last.is_a? Hash 
    # do something with options 
    errors.add_to_base("error message") if condition.exists? 

end 
2

Bạn chỉ có thể làm điều gì đó như thế này:

def validate 
    errors.add('That particular field', 'can not be the value you presented') if !self.field_to_check.blank? && self.field_to_check == 'I AM COOL' 
end 

Không cần phải gọi tham chiếu đến nó, vì tôi tin rằng phương thức validate được xử lý (nếu có) sau khi bất kỳ validates_uniqueness_of -like hợp lệ.

Đã thêm: Thông tin khác trong tài liệu API Rails here.

Các vấn đề liên quan