我在Rails 3中使用mongoid,我遇到了这个问题:
我们说我有一个Shape模型:
class Shape
include Mongoid::Document
field :x, type: Integer
field :y, type: Integer
embedded_in :canvas
end
Canvas模型(有很多形状):
class Canvas
include Mongoid::Document
field :name, type: String
embeds_many :shapes
end
然后Canvas模型"有很多Shapes"。
我有从Canvas继承的浏览器模型:
class Browser < Canvas
field :version, type: Integer
end
那么Browswer模型应该有很多形状&#34;现在
但是,现在我有一个&#34; Circle&#34;继承自Shape的模型:
class Circle < Shape
field :radius, type: Float
end
我想让浏览器模型为#34;有很多圈子&#34;而不是&#34;有很多形状&#34;。也就是说,我想覆盖&#34;有很多&#34;来自&#34;的浏览器模型中的关系有很多形状&#34; to&#34;有很多圈子&#34;。
我该怎么做?
答案 0 :(得分:0)
我不是百分百肯定,但我认为您只需将embeds_many :circles
的行添加到浏览器模型中。您不需要删除继承的关系。
由于Circle继承自Shape,因此圆圈将存储在存储在浏览器文档中“shapes”键中的数组中,它们只需将其_type属性设置为“Circle”。换句话说,拥有embeds_many :shapes
关系不会在数据库中创建任何嵌入多个圆圈的内容,无论如何都不会创建。
但是,这意味着您可以使用Browser.frist.shapes
等方法,但您可以忽略这些方法。添加embeds_many :circles
将为您提供该关系的方法,例如Browser.first.circles
。