我有两个模型用户和状态。 状态嵌入在用户中:
用户.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/