Ruby on rails 嵌入同一模型的两个不同模型

Ruby on rails 嵌入同一模型的两个不同模型,ruby-on-rails,ruby,mongoid,Ruby On Rails,Ruby,Mongoid,我有两个非常相似的收藏。两者之间唯一的区别是一个(项目1)比另一个(项目2)有更多的细节。 两个集合中的文档都已嵌入“详细信息”文档: 项目1: { "_id" : ObjectId("5461c8f0426f727f16000000"), "n" : "Name 1", "detail" : { "d" : [ "Frank Darabont" ], "a" : [ "T

我有两个非常相似的收藏。两者之间唯一的区别是一个(项目1)比另一个(项目2)有更多的细节。 两个集合中的文档都已嵌入“详细信息”文档:

项目1

{
    "_id" : ObjectId("5461c8f0426f727f16000000"),
    "n" : "Name 1",
    "detail" : {
        "d" : [ 
            "Frank Darabont"
        ],
        "a" : [ 
            "Tim Robbins", 
            "Morgan Freeman", 
            "Bob Gunton"
        ]
}
{
    "_id" : ObjectId("5461c8f0426f727f16000000"),
    "n" : "Name 1",
    "detail" : {
        "d" : [ 
            "Frank Darabont"
        ]
}
项目2

{
    "_id" : ObjectId("5461c8f0426f727f16000000"),
    "n" : "Name 1",
    "detail" : {
        "d" : [ 
            "Frank Darabont"
        ],
        "a" : [ 
            "Tim Robbins", 
            "Morgan Freeman", 
            "Bob Gunton"
        ]
}
{
    "_id" : ObjectId("5461c8f0426f727f16000000"),
    "n" : "Name 1",
    "detail" : {
        "d" : [ 
            "Frank Darabont"
        ]
}
我希望两个文档中的“详细信息”字段相同。我在同一个应用程序中有两个模型Item1和Item2,它们都嵌入了“细节”。我看到的解决方案是在两种模型中调用不同的
:detail
,但这不起作用,因为它在Item(1 | 2)文档中查找不存在的子文档,返回
nil
。我现在是这样的:

class Item1
  include Mongoid::Document

  embeds_one :detail1, :class_name => "Detail"

  field :n
end

class Item2
  include Mongoid::Document

  embeds_one :detail2, :class_name => "Detail"

  field :n
end
但是,为了检索“详细信息”子文档,我希望有如下内容:

class Item1
  include Mongoid::Document

  embeds_one :detail, as: :detail1, :class_name => "Detail"

  field :n
end

class Item2
  include Mongoid::Document

  embeds_one :detail, as: :detail2, :class_name => "Detail"

  field :n
end
这不符合我的期望。是否有一种方法可以实现我想要的,或者将详细信息文档更改为在每个集合中具有不同的名称是唯一的解决方案

谢谢。

来自:

多态性

当嵌入的子文档可以属于多个父文档类型时,您可以通过在父文档的定义中添加
as
选项,并在子文档的定义中添加
polymorphic
选项,告知Mongoid支持这一点。在子对象上,将存储一个指示父对象类型的附加字段

它们甚至包括一个示例(为了清楚起见,未列出非预埋件):

您应该可以这样设置它:

class Item1
  include Mongoid::Document
  embeds_one :detail, as: :detailable
end
class Item2
  include Mongoid::Document
  embeds_one :detail, as: :detailable
end
class Detail
  include Mongoid::Document
  embedded_in :detailable, polymorphic: true
end

将详细信息用作独立模型。。。未嵌入。。嵌入的文档只能通过其父级进行访问。。。不能在不同的用户之间共享parents@artmees:无法共享单个文档,但如果将嵌入类设置为多态嵌入文档,则可以共享嵌入类。@muistooshort我从问题中了解到的是,他希望共享文档本身,而不是类。。。无论如何,如果你的解决方案有效的话,我很高兴与你分享它们:D,也很高兴在文档中找到了这一点,因为我已经阅读了很多次,但从未注意到这一部分:D@artmees当前位置我读的是“相同的结构”,但我可能错了。我们会看看OP什么时候回来。但是,是的,如果它是“同一个物体”,那么就没有办法让它工作。这正是我要问的。谢谢(抱歉耽搁了):-)