2011-07-14 8 views
14

मैं अपनी वेबसाइट के शीर्ष पर बैनर की एक श्रृंखला का प्रबंधन करने के लिए एक रेल ऐप लिख रहा हूं; प्रत्येक व्यक्ति को या तो संपादक द्वारा प्रदान किए गए यूआरएल या ड्रॉप-डाउन सूची से चुने गए विशिष्ट उत्पाद से लिंक करना चाहिए।रेल 3 - दो क्षेत्रों में से एक को सत्यापित करना

मैं अन्य चेक के साथ स्थिरता के लिए मॉडल में किसी प्रकार का सत्यापन करना चाहता हूं, जो सुनिश्चित करता है कि सहेजते समय फ़ील्ड (उत्पाद आईडी या यूआरएल) के एक (लेकिन दोनों नहीं) प्रदान किए गए हैं।

क्या validates है - इसे जांचने के लिए टाइप तरीका, या मुझे इस चेक को कहीं नियंत्रक में रखना होगा?

उत्तर

18

यह मॉडल में एक सुंदर सीधे मान्यता है: उपरोक्त के

validate :check_consistency 

def check_consistency 
    if product_id.blank? and url.blank? 
    #one at least must be filled in, add a custom error message 
    return false 
    elsif !product_id.blank? and !url.blank? 
    #both can't be filled in, add custom error message 
    return false 
    else 
    return true 
    end 
end 
+0

धन्यवाद - यह अधिक है या इससे कम, हालांकि आपका एल्सिफ़ काफी सही नहीं है। यह 'elsif (! Product_id.blank? और! Url.blank?) होना चाहिए अन्यथा, यह मेरे स्वयं के कस्टम सत्यापनकर्ताओं को लिखने के बिना अच्छी तरह से मान्य है (जिसे मैं डरता था)। – PaulC

+0

oups आप सही हैं;) – apneadiving

+0

आप यहां एक त्रुटि संदेश कैसे जोड़ेंगे? – alestanis

6

इसी प्रकार के जवाब लेकिन यह सिर्फ एक विशेष या है और बाकी बयान की जरूरत नहीं होती है, तो

validate :check_consistency 
def check consistency 
    errors.add(:base, 'message') if product_id.blank?^url.blank? 
end 
+1

न केवल यह स्वीकृत उत्तर का एक क्लीनर संस्करण है, लेकिन एक विशिष्ट त्रुटि संदेश प्रदान करना केवल झूठी वापसी से अधिक उपयोगी है –

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