Можно ли использовать STI в этой ситуации?

#sql #ruby-on-rails #inheritance #sti

#sql #ruby-on-rails #наследование #sti

Вопрос:

У меня есть таблица с именем people , каждая person из которых может быть a client , a manager , an accountant или любой комбинацией из этих трех. Кроме того, у каждого из них есть специальные столбцы таблицы, помимо тех, что указаны в people таблице.

То, что я делаю сейчас, — это использую a person_id в каждой из таблиц… но я думаю, что было бы намного проще просто использовать одну и ту же таблицу и разные модели для каждой из них, чтобы я мог управлять ими по отдельности.

Должен ли я это сделать?

Ответ №1:

У вас нет хорошей иерархии наследования, поэтому я не думаю, что STI применяется. Например, как бы вы представили человека, который был одновременно менеджером и бухгалтером, с точки зрения (единого) наследования?

Если бы у человека могла быть только одна из трех ролей, тогда, возможно, STI имело бы смысл; но даже тогда реализация ролей с использованием наследования должна вызывать у вас в голове тревожные звоночки, вы должны знать, что одному человеку рано или поздно понадобится несколько ролей (и это, вероятно, немедленно станет критической необходимостью после родов).

Комментарии:

1. Я использую флаги в таблице и default_scope: t.boolean :is_client и default_scope where(is_client: true) и затем: def destroy; if not new_record?; update_attribute :is_client, false; end; freeze; end