При использовании наследования таблиц классов рекомендуется , чтобы подкласс ссылался на суперкласс, а не наоборот. Обычно в Rails полиморфные ассоциации работают в другом направлении - супер относится к подклассу.
Рекомендуется
vehicle
.id
car
.vehicle_id # PK instead of using id (identity column)
boat
.vehicle_id
Типичная Рельсовая полиморфная ассоциация
vehicle
.id
.subclass_type
.subclass_id
car
.id
boat
.id
Что мне нравится в рекомендуемом подходе, так это то, что я могу покончить с наличием несовпадающих ключей. То есть данный автомобиль и его транспортное средство имеют один и тот же идентификатор.
В моем конкретном случае я потенциально буду поддерживать множественное наследование, и, например, у меня может быть гибридный автомобиль-катер.
Вопросы:
Как бы вы настроили ассоциации ActiveRecord ...
Если транспортное средство может иметь только один подкласс?
Если транспортное средство может иметь много подклассов? (Проблема, которую я вижу здесь, заключается в том, что, не указав конкретный тип subclass_type, как ассоциации узнают, какую таблицу нужно выбрать. Я не думаю, что они будут и поэтому должны были бы попасть во все возможные таблицы. Поэтому, возможно, таблица пересечения поможет здесь. )
Является ли это хорошим шаблоном проектирования для использования с ActiveRecord, или он достаточно уступает Rails, чтобы его не было?