2011-11-17 1 views
5

で新しいドキュメントを作成し、分類モデルを埋め込み、のMongoDBは - 私はUserモデルを次のようしている埋め込まれた配列

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から、.newと.createは実際に同じmongoコマンドを生成することが分かりました。

助けが必要です。

答えて

10

すぐにドキュメントをmongoに保存してください。カテゴリ文書は別の文書の中にあるので(埋め込まれたものとして)、個別に保存することはできません。それはなぜあなたがエラーを取得しているのですか?

さらに明瞭にするために、サブフィールドを含むドキュメント にフィールドとして埋め込みドキュメントを想定します。これで、 はドキュメントなしでフィールドを保存することはできません。右?

その他の手新しいは、ドキュメントクラスを初期化し、< <を使用している場合にのみ、親ドキュメントに挿入されます。

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

これは

+0

は完全に非常に明確で、理解するのに役立ちます

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

希望に相当します。 – larryzhao

関連する問題