我试图了解mongoid中的关系,但无法超越以下内容:
class Band
include Mongoid::Document
embeds_many :photos
end
class Photo
include Mongoid::Document
embedded_in :Band
end
在上面的代码中,Instructing Band to embed_many phtos将在Band内存储完整的照片数据。但是,将embedded_in置于Photo类中需要什么?如果我们不将embedded_in放在Photo中,它会不会自动变成多态?
此外,查询Photo.all
会获取嵌入在乐队内部的照片吗?如果是,这是embedded_in的原因吗?我们可以为一个类设置多个embedded_in吗?
答案 0 :(得分:4)
需要embedded_in
调用才能将方法添加到Photo
类,以便您可以访问嵌入照片的频段。就像使用has_many
和belongs_to
一样,尽管外键仅存储在具有belongs_to
的对象中。它还添加了methods to check if the Photo is persisted等等。是的,you can have multiple embedded_in
for one class。
Photo.all
不会为您提供其他课程中嵌入的照片。 Normaly,如果你只通过另一个访问模型,你就可以嵌入它。一次获取整个文档比在使用与外键的关系时再次往返数据库更便宜。因此,如果您需要Photo.all
之类的内容,则不应嵌入Photo
。