#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 таблицы объединения должно быть достаточно