我正在Rails 5中创建一个具有Group和Person模型的应用程序。一个人可以是多个组的成员,一个组可以有多个成员。我知道如何建立这种关系。但是,一个人也可以是许多小组的领导者,而一个小组可以有许多领导者。 Rails提供了一种简便的方法对此进行建模吗?
通常,我会用外键创建一个表来表示每个关系,但是我想知道Rails是否提供了一种更简单的方法来设置它。
答案 0 :(得分:-1)
我相信您有一个名为groups_persons的联接表,您只需要在其中添加新列
add_column :groups_persons, :leader, :boolean
答案 1 :(得分:-1)
似乎最简单的方法是通过标准habtm关系和联接表上的“ leader”标志。
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
然后,您可以使用简单的Proc为“ member_groups”或“ leader_groups”创建关系:
-> { where(groups_people: { leader: true }) }