【发布时间】:2012-06-13 23:32:24
【问题描述】:
如何创建一个能够保存在自己的集合中并嵌入到另一个文档中的 Mongoid 模型?
【问题讨论】:
标签: ruby-on-rails-3 mongodb mongoid
如何创建一个能够保存在自己的集合中并嵌入到另一个文档中的 Mongoid 模型?
【问题讨论】:
标签: ruby-on-rails-3 mongodb mongoid
简短的回答:你不能。
当您在两个 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_many和embedded_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")。
【讨论】:
TemporaryUpload 和UserImage。将所有共享功能放入 /lib/ 中的单个模块中,然后将该模块包含在两个类中。唯一的区别是一个被嵌入而另一个被引用。如果您需要更多详细信息 - 请告诉我,我会更新我的答案。