这是我的设置,然后解释了我要完成的工作。
class Layer < ActiveRecord::Base
has_and_belongs_to_many :components
end
class Component < ActiveRecord::Base
has_and_belongs_to_many :layers
end
class ImageComponent < Component
# I want this table to inherit from the Component table
# I should be able to add image-specific fields to this table
end
class VideoComponent < Component
# I want this table to inherit from the Component table
# I should be able to add video-specific fields to this table
end
我想能够做什么:
layer.components << ImageComponent.create
layer.components << VideoComponent.create
在实践中,我意识到ImageComponent
并且VideoComponent
实际上必须继承自ActiveRecord::Base
. 有什么方法可以很好地在 Rails 中实现模型子类化?
现在我的Component
模型设置是polymorphic
这样的ImageComponent
,VideoComponent
每个has_one :component, as: :componentable
. 这给我的代码增加了一层烦恼和丑陋:
image_component = ImageComponent.create
component = Component.create
component.componentable = image_component
layer.components << component
我想一个简单的解释方法是我想在层和组件之间实现一个 habtm 关系。我有多种类型的组件(即 ImageComponent、VideoComponent),它们各自具有相同的基本结构,但与它们相关联的字段不同。关于如何实现这一点的任何建议?我觉得我错过了一些东西,因为我的代码感觉很hackish。