2010-09-22 14 views
8

टाइप कर सकता है मेरे पास एक ऑब्जेक्ट वाला एक ऑब्जेक्ट है जिसका नाम बड़ा दशमलव है। कक्षा परिभाषा में मेरे पास validates_numericality_of है।विशेषता सेटर्स से पहले सत्यापन

हालांकि अगर मैं:

a.value = 'fire' 

'आग' समाप्त होता सत्यापन आग तो इससे पहले कि सही प्रकार पर टाइपकास्ट होना:

a.valid? => true 

कैसे मान्यता समान किरदार से पहले आग मिलता है?

धन्यवाद

दान

उत्तर

14

ActiveRecord::Base docs से:

कभी-कभी आप स्तंभ निर्धारित समान किरदार पहले अपने पाठ्यक्रम चलाने के बिना कच्चे विशेषता डेटा को पढ़ने में सक्षम होना चाहता हूँ। <attribute>_before_type_cast एक्सेसर्स का उपयोग करके द्वारा किया जा सकता है कि सभी विशेषताओं में। उदाहरण के लिए, यदि आपके Account मॉडल एक संतुलन विशेषता है, आप account.balance_before_type_cast या account.id_before_type_cast कॉल कर सकते हैं।

यह सत्यापन स्थितियों में, जहां उपयोगकर्ता एक पूर्णांक क्षेत्र के लिए एक स्ट्रिंग की आपूर्ति हो सकता है में विशेष रूप से उपयोगी है और आप मूल स्ट्रिंग एक त्रुटि संदेश में वापस प्रदर्शित करना चाहते हैं। विशेषता तक पहुंचने से सामान्य रूप से स्ट्रिंग को 0 पर टाइप किया जाएगा, जो आप नहीं चाहते हैं।

+0

फ़ैई, अगर आप इसे अपने विचारों में अजीब सत्यापन संदेश प्राप्त किए बिना करना चाहते हैं। जैसे "एक नंबर से पहले प्रकार कच्चा होना चाहिए" अगर आप किसी [कस्टम सत्यापनकर्ता] बना सकते हैं (http://guides.rubyonrails.org/active_record_validations_callbacks.html#custom-validators) कि 'की जाँच करता है" # {विशेषता} _before_type_cast "' बजाय सिर्फ विशेषता को जांचना। – Ajedi32

+0

@ Ajedi32 या पास: वैधता के लिए संदेश विकल्प? – sheerun

+2

@sheerun नहीं, यह काम नहीं करेगा क्योंकि संदेश विकल्प नहीं बदलता है क्या विशेषता प्रमाणीकरण त्रुटि के साथ जुड़ा हुआ है। (उदा में " प्रकार डाली एक नंबर हो सकता है पहले चाहिए", आप केवल उस विकल्प को इस्तेमाल कर सकते हैं संदेश के "एक संख्या होनी चाहिए" भाग बदलने के लिए।) – Ajedi32

1

एक नया मणि validate types in rails मदद करने के लिए बनाया गया है।

एक explanatory blog post "क्यों" इसे पहले स्थान पर बनाया गया था, इसका उत्तर देने के लिए मौजूद है।

इस पुस्तकालय के साथ अपने कोड हो सकता है:

class SomeObject < ActiveRecord::Base 
    validates_type :value, :big_decimal 
end 

यह जब एक नाव के अलावा कुछ चुपचाप एक BigDecimal को value कास्टिंग और यह बचत के बजाय value को सौंपा गया है एक अपवाद फेंक देते हैं।

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