2011-11-17 11 views
5

मैं उपयोगकर्ता मॉडल का अनुसरण किया है में, श्रेणी मॉडल, एम्बेड करता हैMongoDB - एक नया दस्तावेज़ बनाने एक एम्बेडेड सरणी

class User 
    include Mongoid::Document 
    include BCrypt 

    field :email,   :type => String 
    field :password_hash, :type => String 
    field :password_salt, :type => String 

    embeds_many :categories 
    embeds_many :transactions 
    .... 
    end 

मेरा प्रश्न, मैं सिर्फ पाया जाता है कि अगर मैं कोड का उपयोग करें:

me = User.where("some conditions") 
me.categories << Category.new(:name => "party") 

सब कुछ ठीक काम करता है, लेकिन अगर मैं .create विधि का उपयोग करें:

me = User.where("some conditions") 
me.categories << Category.create(:name => "party") 

मैं एक अपवाद मिल जाएगा:

undefined method `new?' for nil:NilClass 

कोई भी जानता है कि वह क्यों है? और mongoid.org http://mongoid.org/docs/persistence/standard.html से, मैं इसे देख सकता था। नया और .create वास्तव में एक ही mongo आदेश उत्पन्न करता है।

आवश्यकताओं मदद, धन्यवाद :)

उत्तर

10

तुरंत मोंगो में दस्तावेज़ जारी रहती बनायें। चूंकि श्रेणी दस्तावेज़ किसी अन्य दस्तावेज़ (एम्बेडेड के रूप में) के भीतर है, इसलिए आप इसे अलग से सहेज नहीं सकते हैं। Thats क्यों आपको त्रुटि मिल रही है।

अधिक स्पष्टता के लिए, उप-फ़ील्ड वाले दस्तावेज़ में एम्बेडेड दस्तावेज़ को फ़ील्ड के रूप में मानें। अब आप आसानी से समझ सकते हैं कि आप दस्तावेज़ के बिना फ़ील्ड को सहेज नहीं सकते हैं। सही?

अन्य हाथ नई दस्तावेज़ वर्ग को प्रारंभ और जब < < का उपयोग कर माता पिता डॉक में केवल सम्मिलित किया जाएगा।

Category.create(:name => "party") 
>>NoMethodError: undefined method `new?' for nil:NilClass 

को

c = Category.new(:name => "party") 
c.save 
>>NoMethodError: undefined method `new?' for nil:NilClass 

आशा बराबर है इस में मदद करता है

+0

पूरी तरह से समझते हैं बहुत स्पष्ट। – larryzhao

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