2008-09-19 13 views
12

अपने मॉडल में मेरे पास है:मैं अपने ActiveRecord मॉडल के पैरामीटर के साथ एक कस्टम सत्यापन विधि कैसे लिखूं?

validate :my_custom_validation 

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

मैं बहुत तरह vaildation mycustomer में कुछ पैरामीटर जोड़ चाहते हैं:

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

मैं मानकों के लिए खाते mycustomvalidation समारोह कैसे लिख सकता हूँ?

उत्तर

6

मान्यकर्ताओं के पास सामान्य रूप से एक सरणी पैरामीटर होता है जो पहले, फ़ील्ड को मान्य करने के लिए इंगित करता है और आखिरकार (यदि यह मौजूद है) विकल्प के साथ हैश है।

:my_custom_validation, parameter1: x, parameter2: y 

: आप की तरह कुछ करना चाहते हैं,

{ parameter1: x, parameter2: y} 

इसलिए: my_custom_validation, एक क्षेत्र का नाम है, जबकि parameter1: एक्स, parameter2: y एक हैश होगा

अपने उदाहरण में
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

तुम बस कुछ इस तरह कर सकते हैं:

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 

इसे संदर्भ, के रूप में मेरा मानना ​​है कि सत्यापित करें विधि संसाधित किया जाता है (यदि वह मौजूद) किसी भी validates_uniqueness_of तरह सत्यापन के बाद कॉल करने के लिए कोई ज़रूरत नहीं।

जोड़ा गया: रेल एपीआई दस्तावेज़ here में अधिक जानकारी।

संबंधित मुद्दे