रेल: न्यूनतम और एक स्ट्रिंग की अधिकतम लंबाई मान्य लेकिन यह रिक्त होने के लिए अनुमति देता है


88

मेरे पास एक क्षेत्र है जिसे मैं मान्य करना चाहूंगा। मैं चाहता हूं कि फ़ील्ड को रिक्त छोड़ा जा सके, लेकिन यदि कोई उपयोगकर्ता डेटा दर्ज कर रहा है तो मैं चाहता हूं कि वह एक निश्चित प्रारूप में हो। वर्तमान में मैं मॉडल में नीचे मान्यताओं का उपयोग कर रहा हूं, लेकिन यह उपयोगकर्ता को इसे खाली छोड़ने की अनुमति नहीं देता है:

validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5

अपने लक्ष्य को पूरा करने के लिए मैं इसे कैसे लिखूं?

जवाबों:



133

आप इस प्रारूप का उपयोग भी कर सकते हैं:

validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true

या जब से आपका न्यूनतम और अधिकतम समान है, निम्नलिखित भी काम करेगा:

validates :foo, length: {is: 5}, allow_blank: true

12

या अधिक संक्षिप्त (नए हैश सिंटैक्स के साथ), मान्य दस्तावेज से :

validates :foo, length: 5..5, allow_blank: true

ऊपरी सीमा को संभवत: कुछ और सार्थक का प्रतिनिधित्व करना चाहिए जैसे "में: 5..20", लेकिन सिर्फ पत्र को प्रश्न का उत्तर देना।


नहीं लगता कि inस्ट्रिंग्स के साथ काम करेंगे, केवल संख्याएँ लगती हैं
इकोलॉजिक

1
इसके बजाय काम करना चाहिए validates :foo, length: 2..5, allow_blank: trueलेकिन `लंबाई: {यह है: 5}` ओपी के मामले में करना होगा
PhilT


3

हर सत्यापन_ * स्वीकार करता है: यदि या: जब तक विकल्प नहीं

validates_length_of :foo, :maximum => 5, :if => :validate_foo_condition

जहाँ validate_foo_condition वह विधि है जो सही या गलत लौटाती है

आप एक प्रोक ऑब्जेक्ट भी पास कर सकते हैं:

validates_length_of :foo, :maximum => 5, :unless => Proc.new {|object| object.foo.blank?}


2

उस के बारे में कैसा है: validates_length_of :foo, is: 3, allow_blank: true



-4

अपने मॉडल में उदा

def validate
  errors.add_to_base 'error message' unless self.foo.length == 5 or self.foo.blanc?
end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.