2012-03-27 5 views
9

मैं एक क्षेत्र स्ट्रिंग foo है में बहु फॉर्मेट सत्यापन कि चार शर्तों को पूरा करना होगा:रेल

  • यह गैर रिक्त होना चाहिए
  • यह सभी रिकॉर्ड
  • यह केवल अक्षर होने चाहिए के लिए अद्वितीय होना चाहिए , अंक, और
  • hypens यह स्ट्रिंग "बार"

पहले दोद्वारा नियंत्रित किया जाता है के साथ शुरू नहीं करना चाहिएऔर :uniqueness सत्यापन। उत्तरार्द्ध दो आसानी से :format regexes के माध्यम से मान्यताओं द्वारा संभाला जाता है।

क्या :message मानों के साथ कई :format सत्यापन नियम शामिल करना संभव है?

मैं दो शर्तों को एक एकल रेगेक्स में संयोजित करना टालना चाहता हूं। कई संदेशों के अलावा, मुझे लगता है कि अगर वे अलग हैं तो पढ़ने और लिखना आसान है।

आदर्श रूप से मैं इन सभी को एक validates कॉल में लपेटना चाहता हूं, लेकिन इसकी कड़ाई से आवश्यकता नहीं है।

उत्तर

17

source code for the validates method के अनुसार, ऐसा करने का कोई तरीका नहीं है; आपको एक :format कुंजी और हैश मान के रूप में विकल्पों का एक सेट मिलता है।

हालांकि, वहाँ मुझे validates दो बार कॉल करने से रोक रहा है कुछ भी नहीं है:

validates :foo, 
    :presence => true, 
    :uniqueness => true, 
    :format => { 
    :with => /^[\w\-]*$/, 
    :message => 'may only contain letters, digits, and hyphen' 
    } 
validates :foo, :format => { 
    :with => /^(?!bar)/, 
    :message => 'may not start with "bar"' 
} 

यह ठीक से काम करने लगता है।

1

एक मान्य Validator#validate source code के रूप में बहु गुणों को एम्बेड कर सकता है। तो नीचे जितना अधिक साफ हो सकता है:

validates :foo, 
    :presence => true, 
    :uniqueness => true, 
    :format => {`enter code here` 
    :with => /^[\w\-]*$/, 
    :message => 'may only contain letters, digits, and hyphen' 
    }, 
    :format => { 
    :with => /^(?!bar)/, 
    :message => 'may not start with "bar"' 
    } 
}