Mongodb - 在嵌入式阵列中创建新文档

时间:2011-11-17 16:41:07

标签: ruby-on-rails-3 mongodb mongoid

我有以下用户模型,嵌入了分类模型,

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命令。

需要帮助,谢谢:)

1 个答案:

答案 0 :(得分:10)

立即创建将文档保存到mongo中。由于类别文档位于另一个文档(嵌入式)中,因此无法单独保存。这就是你收到错误的原因。

  

为了更加清晰,假设嵌入式文档作为父级中的字段   包含子字段的文档。现在您可以轻松理解这一点   没有文档,您无法保存字段。正确?

其他手初始化文档类,并且仅在使用&lt;&lt;。

时才会插入到父文档中
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

希望这有帮助