Несколько ассоциаций с одной и той же таблицей в Rails 5 - PullRequest
0 голосов
/ 11 марта 2019

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

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

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Кажется, что самый простой способ сделать это - через стандартное отношение habtm с флагом "лидер" в таблице соединений.

class CreateJoinTableGroupPerson < ActiveRecord::Migration[5.1]
  def change
    create_join_table :groups, :people do |t|
      t.boolean :leader, default: false
      t.index [:group_id, :person_id]
      t.index [:person_id, :group_id]
    end
  end
end

#app/models/person.rb
class Person < ActiveRecord::Base
  has_and_belongs_to_many :groups
end

#app/models/group.rb
class Group < ActiveRecord::Base
  has_and_belongs_to_many :people
end

Затем вы можете создать отношения для "member_groups" или "leader_groups", используя простой Proc, такой как:

-> { where(groups_people: { leader: true }) }
0 голосов
/ 11 марта 2019

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

add_column :groups_persons, :leader, :boolean
...