当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Mongodb-在嵌入式阵列中创建新文档》经验,为你挑选了1个好方法。

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

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> RameshVel..:

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

为了更清楚,假设嵌入文档作为父文档中包含子字段的字段.现在,您可以轻松了解无法在没有文档的情况下保存字段.对?

另一方面新建  初始化文档类,并且只在使用<<时才会插入到父文档中.

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

希望这可以帮助

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有