Множественные ассоциации с одной и той же таблицей в Rails 5

#ruby-on-rails #relational-database #backend

#ruby-on-rails #реляционная база данных #серверная часть

Вопрос:

Я создаю приложение в Rails 5, в котором есть модели для группы и пользователя. Пользователь может быть членом многих групп, а в группе может быть много членов. Я знаю, как создать эту связь. Однако человек также может быть лидером многих групп, а в группе может быть много лидеров. Предоставляет ли Rails простой способ смоделировать это?

Обычно я бы создал таблицу с внешними ключами для представления каждой взаимосвязи, но мне интересно, предоставляет ли Rails более простой способ ее настройки.

Ответ №1:

Я полагаю, у вас есть объединенная таблица с именем groups_persons, вам просто нужно добавить туда новый столбец,

 add_column :groups_persons, :leader, :boolean
  

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

1. Согласно документам : «Использование дополнительных атрибутов в таблице объединения в ассоциации has_and_belongs_to_many не рекомендуется».

2. Это отличная идея, хотя это означало бы, что при поиске всех лидеров теперь также придется выполнять проверки всех кортежей-членов. Есть ли способ объявить две таблицы join с разными именами? Например, groups_members и groups_leaders

3. нет, 1 отношение — 1 таблица (в большинстве случаев). я думаю, что 1 таблицы объединения должно быть достаточно