这是我的设置,接下来是我试图实现的解释。
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),它们都具有相同的基本结构,但与它们相关联的字段不同。有没有什么建议可以实现这个目标?我感觉自己漏掉了什么,因为我的代码感觉很笨拙。