मुझे लगता है कि आपकी डॉलर राशि दशमलव प्रकार का है। इसलिए, किसी भी मूल्य उपयोगकर्ता को फ़ील्ड में प्रवेश करने से पहले डेटाबेस में सहेजने से पहले स्ट्रिंग से उचित प्रकार में डाला जा रहा है। प्रमाणीकरण पहले से ही संख्यात्मक प्रकारों में परिवर्तित मानों पर लागू होता है, इसलिए रीगेक्स वास्तव में आपके मामले में एक उपयुक्त सत्यापन फ़िल्टर नहीं है।
- उपयोग
validates_numericality_of
: आप इस को हल करने के संभावनाओं की जोड़ी है, हालांकि है। इस तरह आप रूपांतरण को रेल में पूरी तरह से छोड़ देते हैं, और सिर्फ यह जांचें कि राशि किसी दिए गए सीमा के भीतर है या नहीं।
validate_each
विधि का उपयोग करें और अपने सत्यापन तर्क को स्वयं कोड करें (उदा। जांच करें कि मान में 2 दशमलव से अधिक अंक हैं)।
- मान्य attribute before it's been typecasted:
यह सत्यापन स्थितियों में, जहां उपयोगकर्ता एक पूर्णांक क्षेत्र के लिए एक स्ट्रिंग की आपूर्ति हो सकता है में विशेष रूप से उपयोगी है और आप मूल स्ट्रिंग एक त्रुटि में वापस प्रदर्शित करना चाहते हैं संदेश। विशेषता तक पहुंचने से सामान्य रूप से स्ट्रिंग को 0 पर टाइप किया जाएगा, जो आप नहीं चाहते हैं।
तो, आपके मामले में, आप का उपयोग करने के लिए सक्षम होना चाहिए:
validates_format_of :amount_before_type_cast, :with => /^[0-9]+\.[0-9]{2}$/, :message => "must contain dollars and cents, seperated by a period"
हालांकि, ध्यान दें उपयोगकर्ताओं के लिए यह अपने कठोर प्रवेश नियमों का पालन करने थकाऊ दिखाई दे सकता है (मैं वास्तव में करने में सक्षम होने पसंद करेंगे उदाहरण के लिए 500
500.00
टाइप करें), और कुछ स्थानीय अवधि में दशमलव विभाजक नहीं है (यदि आपने कभी भी अपने ऐप को अंतर्राष्ट्रीयकृत करने की योजना बनाई है)।
स्रोत
2010-05-04 17:18:38
किसी भी कारण से आप regex के बजाय 'validates_numericality_of' का उपयोग नहीं करते हैं? –
500.001 विफल होने में यह सुनिश्चित करने के लिए मैं 'validates_numericality_of' का उपयोग कैसे करूं? मैं केवल विशेष रूप से स्वरूपित करना चाहता हूं, '[9 अंकों के माध्यम से 0 की संख्या]। [2 से 9 अंकों के 2]' - इस प्रकार 'validates_format_of: राशि, = =/^ [0-9] + \ के साथ।[0-9] {2} $ /,: संदेश => "एक अवधि से अलग" डॉलर और सेंट होना चाहिए "' –