2011-11-02 9 views
55

मैं एक रिकॉर्ड सहेजने की कोशिश कर रहा हूं जिसमें एक फ़ील्ड सेट नहीं है - जिसमें मॉडल में मान्य संख्यात्मकता है। भले ही सत्यापन में उपस्थिति की आवश्यकता नहीं है, फिर भी यह एक त्रुटि फेंक रहा है कि फ़ील्ड एक संख्या नहीं है।रेल सत्यापन को संख्यात्मकता की आवश्यकता होती है, भले ही उपस्थिति सत्य पर सेट न हो

मान्यता: कि करने के लिए

validates :network_id, :numericality => true 

कोड की बचत है मॉडल:

networks.each do |network| 
    network.url = network.raw_data.link 
    network.save! 
end 

त्रुटि:

Validation failed: Network is not a number 

उत्तर

108
validates :network_id, :numericality => true, :allow_nil => true 
+1

समान उत्तर, एक ही समय => +1 – apneadiving

+0

@Unixmonkey डीबी में हर क्षेत्र के लिए इसकी आवश्यकता होगी जो शून्य मानों की अनुमति देता है? या रेलों को स्वचालित रूप से इसे संभालने का कोई तरीका है (ऐसा लगता है कि गधे को या तो उपस्थिति या allow_nil सेट करने के लिए दर्द होता है) – Hopstream

+0

@ होपस्ट्रीम यदि आप संख्यात्मकता को मान्य कर रहे हैं, तो शून्य संख्यात्मक मान नहीं है। आपको इसे स्पष्ट रूप से अनुमति देना है। आपको सभी क्षेत्रों के लिए ऐसा करने की आवश्यकता नहीं है। – Unixmonkey

14

आप allow_blank

validates :network_id, :numericality => true, :allow_blank => true 
+0

ओह आदमी - मैंने सोचा कि शून्य की अनुमति डिफ़ॉल्ट थी। क्या मुझे उन सभी क्षेत्रों में जोड़ना चाहिए जिन्हें शून्य होने की अनुमति है? रेल भाग पर अनावश्यक लगता है। – Hopstream

+1

@apneadiving मैं गलत हो सकता है ... यह 'मान्य होना चाहिए: network_id,: numericality => {: allow_blank => true} ', है ना? –

+0

@ होपस्ट्रीम: मेरा लिंक देखें:: allow_blank विकल्प समान है: allow_nil विकल्प – apneadiving

38
validates :network_id, :numericality => {:allow_blank => true} 
+3

मुझे लगता है कि इसे लिखने का सही तरीका था, +1 – apneadiving

+0

यह अधिक उपयोगी उत्तर –

+0

यह वास्तव में बेहतर है यह खाली तारों की अनुमति देता है: http://edgeguides.rubyonrails.org/active_record_validations.html#allow-blank – Hopstream

9

रेल 4 में (रूबी 2), तो आप लिख सकते हैं का उपयोग करना चाहिए:

validates :network_id, numericality: { greater_than_or_equal_to: 0, allow_nil: true } 
+2

मुझे नहीं पता कि यह मेरे लिए क्यों काम नहीं करता है। मैं रेल 4.2 का उपयोग कर रहा हूँ। उस सत्यापन के साथ, मैं शून्य मान के साथ सहेज सकता हूं, लेकिन यह स्ट्रिंग को सहेजने की भी अनुमति देता है। – leandrotk

0

तुम भी इस प्रकार लिख सकते हैं ...

validates_numericality_of :network_id, allow_nil: true 
संबंधित मुद्दे

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