Вот моя настройка, а затем объяснение того, что я пытаюсь выполнить.
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), каждый из которых имеет одну и ту же базовую структуру, но различные связанные с ними поля. Какие-либо предложения о том, как это можно сделать? Я чувствую, что у меня что-то не хватает, потому что мой код кажется хакерским.