2011-09-20 9 views
7

प्रारंभकर्ता में मेरे पास एक विशाल COUNTRY_CODES हैश है, प्रारूप के साथ:मॉडल फ़ील्ड को मान्य करें: यदि मान हैश में एक कुंजी के बराबर है

{ :us => "United States, :de => "Germany" } 

मेरे मॉडल में मैं मान्य करना चाहता हूं कि दर्ज मूल्य यह है:

  • वर्तमान
  • मेरी कुंजी देश कोड हैश

मैं इसे कैसे आकर्षित करूं?

मैं इसका उपयोग नहीं कर सकता:

validates :country, :presence => true, 
        :inclusion => { :in => COUNTRY_CODES } 

मैंने कस्टम सत्यापनकर्ताओं को आजमाया है, लेकिन जब मान शून्य है, तो मुझे विधि त्रुटियां मिलती हैं, उदा। जब मैं value.to_sym का उपयोग करने का प्रयास करता हूं, जिससे मुझे वैधकर्ता को प्रमाणित किया जाता है और यह गन्दा हो जाता है।

ऐसा करने का सबसे DRY और कुशल तरीका जानने का प्रयास कर रहा है।

उत्तर

14

आपको स्ट्रिंग के रूप में COUNTRY_CODES कुंजी (प्रतीक) एकत्र करने और समावेशन के लिए मान्य करने की आवश्यकता है। तो उपयोग करें:

validates :country, :presence => true,:inclusion => { :in => COUNTRY_CODES.keys.map(&:to_s) } 
+1

एफवाईआई, समावेशन के लिए डिफ़ॉल्ट है: allow_nil => झूठी, सत्यापन की उपस्थिति की कोई आवश्यकता नहीं है। – efoo

4

यदि आप केवल हैश में कुंजी के साथ जांचना चाहते हैं तो COUNTRY_CODES.keys आज़माएं।

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