2012-11-05 15 views
9

मैं एक मॉडल निम्नलिखित के समान है पर विफल रहता है,रेल उपस्थिति सत्यापन मान 0

class Activity < ActiveRecord::Base 
    attr_accessible :name, :admin 

    validates :name, :presence => true 
    validates :admin, :presence => true 
end 

नाम संपत्ति एक स्ट्रिंग है और व्यवस्थापक संपत्ति प्रवास में एक बूलियन के रूप में परिभाषित किया गया है।

अगर मैं कंसोल का उपयोग कर में मॉडल का एक उदाहरण बनाने का प्रयास करें,

a = Activity.create(:name => 'Test', :admin => 0) 

फिर सत्यापन कह मैं व्यवस्थापक के लिए एक मूल्य प्रदान करने की आवश्यकता विफल रहता है। क्यूं कर? मैंने एक मूल्य प्रदान किया है।

मैं समझ सकता हूं कि क्या मैं मूल्य प्रदान करने में विफल रहा था या अगर मैंने शून्य प्रदान की थी। लेकिन 0 जैसे मूल्य (या उस मामले के लिए भी झूठा) वैधता विफल होने का कारण बनता है?

उत्तर

17

validates :presenceblank? का उपयोग यह निर्धारित करने के लिए करता है कि कोई मान मौजूद है या नहीं। लेकिन false.blank? => सच। तो सत्यापन विफल रहता है, क्योंकि blank? ActiveRecord को बता रहा है कि कोई मान मौजूद नहीं है।

आप इस रूप में पुनर्लेखन कर सकते हैं:

validates :field_name, :inclusion => { :in => [true, false] }

रूप Rails Guides: ActiveRecord Validations में सिफारिश की

यह भी देखना A concise explanation of nil v. empty v. blank in Ruby on Rails

+0

मुझे समझ बनाता है मुझे लगता है कि । लेकिन मुझे लगता है कि मैं अभी भी झूठी बात नहीं कर रहा हूँ। झुकाव? या 0.blank? सच होना चाहिए – richard

+0

पर्याप्त मेला, लेकिन आपको रेलों को लिखने वाले लोगों के साथ इसे लेना होगा :) – zetetic

+0

+1। समाधान काम करता है। लेकिन मैं भी चाहता हूं कि रेल ने इसे बेहतर तरीके से संभाला। यहां समाधान का उपयोग करते समय त्रुटि संदेश ': upgradeed_kitchen_bathrooms => [" सूची में शामिल नहीं है "] 'जो कि हम जो भी कर रहे हैं उसकी सादगी पर भरोसा करते हुए भयानक है। –

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