В наследовании таблиц классов, как сделать так, чтобы родитель и ребенок использовали один и тот же идентификатор?

У меня есть два класса: 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'

Другие вопросы по тегам