В наследовании таблиц классов, как сделать так, чтобы родитель и ребенок использовали один и тот же идентификатор?
У меня есть два класса: Topic
а также Buy::Topic
, Последний является подклассом первого через внешний ключ (Buy::Topic.topic_id == Topic.id
). Таким образом, по существу, это использование шаблона наследования таблиц классов.
Buy::Topic
имеет свой id
и внешний ключ topic_id
указывая на родителя Topic
объект.
Однако я хотел бы убедиться, что идентификатор Buy::Topic
быть таким же, как topic_id
от родителя вот так:
#<Topic id: 22598>
с #<Buy::Topic id: 22598, topic_id:22598
Возможно ли это в Rails? Это лучше для целей SEO и облегчит работу с Cancan load_and_authorize_resource
(иногда можно использовать неверный идентификатор для поиска вещей).
UDPATE:
Эта схема была установлена и сделана в течение длительного времени, поэтому вряд ли она изменится на STI.
2 ответа
Это будет активно разрушать ваш CTI и может даже создать анти-паттерн!
Мой аргумент в том, что если,
Buy::Topic.id == Buy::Topic.topic_id == Topic.id
затем вы создаете отношения один-к-одному между Buy::Topic и Topic.
Это означает, что ни один другой класс не может состоять из Buy::Topic
поскольку id
может столкнуться с некоторыми Topic.id
,
поскольку Buy::Topic
это подкласс Topic
у вас действительно только одна концептуальная сущность сейчас. За исключением того, что у вас есть две таблицы и несколько сумасшедших индексов, чтобы попасть туда
Чувак, это нормально, просто вызови свой столбец topic_parent_id и создай ассоциацию вот так:
own_to:parent,:class_name => 'Topic',:foreign_key => 'topic_parent_id'