具有Mongoid Embedded和Standalone的Rails模型

时间:2012-06-13 23:32:25

标签: ruby-on-rails-3 mongodb mongoid

我如何创建一个Mongoid模型,该模型能够保存在自己的集合中,并嵌入到另一个文档中?

1 个答案:

答案 0 :(得分:6)

简短的回答:你不能。

当您在两个Mongoid文档之间使用嵌入式关系时,这是因为希望子模型位于自己的集合中。它实际上是一个嵌入式文档:嵌入在其父级中。

我不确定你是不是Mongoid的新手,所以你真正想要的是一个被引用的关系,它的行为更像传统的RDBMS关系,其中子文档存储对父文档ID的引用。 Mongoid文档的开头是here

考虑到这些嵌入式模型,在两者之间切换非常容易:

class Person
  include Mongoid::Document

  field :name
  embeds_many :phone_numbers
end

class PhoneNumber
  include Mongoid::Document

  field :area_code
  field :number

  embedded_in :person
end

您只需更改embeds_manyembedded_in,即可:

class Person
  include Mongoid::Document

  field :name
  has_many :phone_numbers
end

class PhoneNumber
  include Mongoid::Document

  field :area_code
  field :number

  belongs_to :person
end

它会起作用。现在,您可以使用以下语句直接查询电话号码:PhoneNumber.where(:area_code => "212")

相关问题