5

है मैं एक description विशेषता के साथ एक Order मॉडल है। यदि केवल दो चरणों में से एक को पूरा किया गया है, तो मैं केवल इसकी उपस्थिति को सत्यापित करना चाहता हूं: यदि वर्तमान चरण पहले चरण के बराबर है या यदि आवश्यकता_विधीकरण सत्य के बराबर है।रेल - मान्यता: अगर एक शर्त रेल 5.</p> <p>पर सच

मैं आसानी से एक शर्त इस तरह के आधार पर मान्य कर सकते हैं:

validates :description, presence: true, if: :first_step? 

def first_step? 
current_step == steps.first 
end 

लेकिन मुझे यकीन है कि एक और शर्त जोड़ने और मान्य करता है, तो एक या दूसरे से सच है के बारे में जाने के लिए कैसे नहीं हूँ।

कुछ की तरह:

validates :description, presence: true, if: :first_step? || :require_validation 

धन्यवाद!

उत्तर

7

आप if: खंड के लिए एक लैम्ब्डा का उपयोग करें और एक या शर्त कर सकते हैं।

validates :description, presence: true, if: -> {current_step == steps.first || require_validation} 
3

क्या आप इसे एक विधि में लपेट सकते हैं? docs

के अनुसार: यदि - एक विधि प्रोक या स्ट्रिंग निर्दिष्ट करता है निर्धारित करने के लिए करता है, तो सत्यापन होने चाहिए (उदाहरण के लिए कॉल करने के लिए करता है, तो: allow_validation, या यदि: Proc.new {| उपयोगकर्ता | user.signup_step> 2})। विधि, proc या स्ट्रिंग को एक वास्तविक या गलत मान पर वापस या मूल्यांकन करना चाहिए।

validates :description, presence: true, if: :some_validation_check 

def some_validation_check 
    first_step? || require_validation 
end 
1

आप जारेड के रूप में एक विधि को जोड़ने के लिए नहीं करना चाहते हैं का कहना है कि उसके बाद आप उपयोग लैम्ब्डा

validates :description, presence: true, if: ->{ first_step? || require_validation } 
2

आप एक लैम्ब्डा पारित कर सकते हैं if शर्त के रूप में मूल्यांकन किया जा करने की कोशिश कर सकते हैं।

validates :description, presence: true, if: -> { first_step? || require_validation }

+1

कि एक लैम्ब्डा प्रयास करें नहीं है? एक ब्लॉक होगा: 'मान्य करता है: विवरण, उपस्थिति: सत्य, अगर: {first_step? || requ_validation} ' –

+0

आह, आप सही हैं। मुझे कहना चाहिए था "आप एक लैम्ब्डा पास कर सकते हैं"। –

+0

:) एक ब्लॉक हालांकि काम करता है। रेल इसे इस्तेमाल करने से पहले इसे एक प्रो या लैम्बडा (मैं भूल जाता हूं) में बदल देता हूं। –

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