В наследовании таблиц классов, как сделать так, чтобы родитель и ребенок использовали один и тот же идентификатор? - PullRequest
0 голосов
/ 06 марта 2012

У меня два класса: 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 и облегчит работу с load_and_authorize_resource Канканом (иногда можно найти неверный идентификатор для поиска вещей).

UDPATE:

Эта схема была установлена ​​и создавалась в течение длительного времени, поэтому вряд ли она изменится на STI.

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Это приведет к активному уничтожению вашего CTI и даже может создать анти-шаблон!

Мой аргумент в том, что если,

Buy::Topic.id == Buy::Topic.topic_id == Topic.id

затем вы создаете отношения один-к-одному между Buy :: Topic и Topic.

Это означает, что ни один другой класс не может быть составлен из Buy::Topic, поскольку id может конфликтовать с некоторым Topic.id.

Поскольку Buy::Topic является подклассом Topic, у вас сейчас есть только одна концептуальная сущность. За исключением того, что у вас есть две таблицы и несколько сумасшедших индексов, чтобы вы туда попали.

0 голосов
/ 06 марта 2012

Чувак, это нормально, просто назови свой столбец topic_parent_id и создай ассоциацию вот так:

own_to: parent,: class_name => 'Topic',: foreign_key => 'topic_parent_id'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...