我有一种情况,我有一个父文档,并且我想要两种不同类型的嵌入文档:一种作为父文档,另一种作为具有可选父文档的子文档。例如:
class ParentDoc
include Mongoid::Document
embeds_many :special_docs
embeds_many :special_doc_groupings
end
class SpecialDoc
include Mongoid::Document
embedded_in :parent_doc
belongs_to :special_doc_groupings
end
class SpecialDocGrouping
include Mongoid::Document
embedded_in :parent_doc
has_many :special_docs
end
在此示例中,SpecialDocs 和 SpecialDocGroupings 可以不存在关系,也可以有父子关系。
然而,这是一个无效的 Mongoid 关联,因为我们得到了这个错误:
Mongoid::Errors::MixedRelations:
问题:由于嵌入了 SpecialDoc,因此不允许通过关系关联从 SpecialDocGrouping 文档中引用 (n) SpecialDoc 文档。
摘要:为了从 SpecialDocGrouping 正确访问一个(n)SpecialDoc,引用需要通过 SpecialDoc 的根文档。在一个简单的情况下,这将需要 Mongoid 为根存储一个额外的外键,在更复杂的情况下,SpecialDoc 是多个级别的深度,则需要为层次结构中的每个父级存储一个键。
解决方案:考虑不嵌入 SpecialDoc,或者在应用程序代码中以自定义方式进行密钥存储和访问。
除了 Mongoid 不支持它之外,我认为我尝试创建的关联类型没有任何问题。
我如何自己实现这种类型的关联?