ruby-on-rails - Mongoid 在父级内部创建嵌入文档

标签 ruby-on-rails mongodb mongoid embedding database-relations

我有两个模型用户状态。 状态嵌入在用户中:

用户.rb

class User

  include Mongoid::Document
  include Mongoid::Timestamps

  embeds_one :status, as: :statusable

状态.rb

class Status

  include Mongoid::Document
  include Mongoid::Timestamps

  embedded_in :statusable, polymorphic: true

现在我正在尝试创建状态文档内部用户:

* User.create!(:name =>'try',:status => {:num => '111'})
=> NameError: uninitialized constant Statu
    from /var/lib/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/inflector/methods.rb:230:in 'block in constantize'
    from /var/lib/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/inflector/methods.rb:229:in 'each'
    ....
    ....

* u = User.create!(:name =>'try')
u.status = Status.create!(:num => '222')
=> Mongoid::Errors::NoParent: 
Problem:
  Cannot persist embedded document Status without a parent document.
Summary:
  If the document is embedded, in order to be persisted it must always have a reference to its parent document. This is most likely caused by either calling Status.create or Status.create! without setting the parent document as an attribute.
Resolution:
  Ensure that you have set the parent relation if instantiating the embedded document direcly, or always create new embedded documents via the parent relation.

* u.status = {:num => '222'}
=> NameError: uninitialized constant Statu

知道为什么会发生这种情况吗?

最佳答案

来自文档:

Model class name cannot end with "s", because it will be considered as the pluralized form of the word. For example Status would be considered as the plural form of Statu, which will cause a few known problems.

因此,请尝试定义与 class_name 元数据的关系,强制 mongoid 使用该类。

embeds_one :status, as: :statusable, class_name: "Status"

关于ruby-on-rails - Mongoid 在父级内部创建嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765524/

相关文章:

javascript - 如何将带有 "$"字段的 JSON 对象插入 Meteor 集合中?

mongodb - MongoLab 中的 getLastError 没有 updatedExisting

C#:合并多数据库驱动接口(interface)

ruby-on-rails - 观察 Rails 和 Mongoid 中的字段

ruby-on-rails - Instagram client.tag_recent_media 零结果 #<Hashie::Array []>

ruby-on-rails - Mongoid 将一个类嵌入为多个字段

ruby-on-rails - ActiveModel 基于关联验证属性

ruby-on-rails - 如何从 Mongoid 模型中删除属性,即不仅仅是取消它们的值

ruby-on-rails - 如何将带有 Devise 的 Rails 应用程序变成 OAuth 提供程序?

javascript - 热从 .js.erb 文件获取 I18.locale?