2015-10-07 9 views
6

mongoid 4.0.2मोंगोइड डिफ़ॉल्ट दायरा डिफ़ॉल्ट मान ओवरराइड करता है। क्यूं कर?

मैं Test वर्ग है:

class Test 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Paranoia 

    field :successful,  type: Boolean, default: false 

    default_scope ->{ where(successful: true) } 
end 

तो मैं कार्य करें: इस व्यवहार के पीछे कारण क्या है:

t=Test.new; t.successful 
=> true 

तो यहाँ सवाल है?

पीएस मैंने को after_initialize विधि की सहायता से इसे रीसेट कर दिया है।

+0

यह एक बग की तरह लगता है। क्या आपने पुष्टि की है कि यह 'डिफ़ॉल्ट_स्कोप' है जो इसका कारण बन रहा है? – Drenmi

+0

@Drenmi जब मैं डिफॉल्ट_स्कोप के साथ लाइन को हटा देता हूं सब ठीक है, तो मुझे लगता है हाँ। –

+0

@muistooshort टी निश्चित रूप से, अब तय है, मेरे बुरे। –

उत्तर

1

Test.create() को कॉल करने का प्रयास करें, सफल भी सच होगा। यह अजीब लगता है, लेकिन सोचें कि आप अपने डिफ़ॉल्ट_स्कोप में क्या कह रहे हैं ... सभी परीक्षण जो सत्य हैं।

यह कुछ ऐसा है active_record मूल रूप से आया है जैसा दिखता है: rails3 default_scope, and default column value in migration लेकिन यह सख्ती से active_record इस काम करना चाहिए पीछा किया जाता है, लेकिन यह नहीं करता है:, यदि आप इसे एक default_scope पर डाल

t= Test.unscoped.new; t.successful 
=> true 

मोंगो दुनिया में इसके साथ सभी ऑब्जेक्ट्स का दायरा रखेगा और मान लेंगे कि आप कुछ भी नया चाहते हैं जो एक ही डिफ़ॉल्ट है। काम के आसपास कॉलबैक का उपयोग कर रहे हैं। आपने बाद में शुरू करने का जिक्र किया है जो कि एक अच्छी पसंद है, हालांकि आपको यह सुनिश्चित करने की ज़रूरत है कि आप यह जांच लें कि वास्तव में यह सेट किया गया है या नहीं। एक और विकल्प डिफ़ॉल्ट के बजाए नामित दायरे का उपयोग करना होगा।

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