Кажется, что самый простой способ сделать это - через стандартное отношение 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 }) }