【问题标题】:Mongodb - create a new document in an embedded arrayMongodb - 在嵌入式数组中创建一个新文档
【发布时间】:2011-11-17 16:41:07
【问题描述】:

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

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

需要帮助,谢谢:)

【问题讨论】:

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


    【解决方案1】:

    Create 立即将文档持久化到 mongo 中。由于类别文档位于另一个文档中(嵌入),因此您无法单独保存它。这就是您收到错误消息的原因。

    为了更清楚起见,假设嵌入文档是父级中的一个字段 包含子字段的文档。现在你可以很容易地理解 您无法在没有文档的情况下保存字段。对吧?

    另一方面new初始化文档类,使用时只会插入到父文档中

    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
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-27
      • 2021-03-24
      • 2021-08-07
      • 2012-04-26
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多