2013-05-30 2 views
0

У меня есть ИППП Person, у меня есть 3 типа: Contact, User и Tenant. Contact и Tenant принадлежит к одной организации, поэтому у них есть столбец organization_id прямо в таблице «people».STI рельсы has_many на один тип

Проблема в том, что тип User может иметь несколько организаций, поэтому он имеет выделенную таблицу с именем «users_privileges». В настоящее время organization_id в таблице «люди» null для типа User, так как у многих пользователей есть две организации.

Есть ли вообще сказать ActiveRecord, когда я скажу Person.all, что для типа User, он не должен проверить столбец organization_id в таблице «людей» и искать has_many в таблице «users_privileges»?

+0

Является ли это полиморфной ассоциацией (например, own_to: person, polymorphic: true) или однонаправленным наложением? – hmind

+0

Вы правы, это STI. Я делал полиморфные вещи, когда писал, редактировал! – allaire

ответ

0

Вы можете достичь этого, установив правильное соотношение в каждом из подклассов, чтобы вы положили belongs_to в Contact и Tenant, поставив один из вариантов has_many в User.

В результате получится, что если вы скажете Person.all, некоторые из полученных объектов ответят на #organizations и некоторые #organization. Вы можете обойти это, добавив метод #organizations к контакту и арендатору и попросите его вернуть только один орган в массиве.

Смежные вопросы