Rails 5中与同一表的多个关联

时间:2019-03-11 19:26:46

标签: ruby-on-rails relational-database backend

我正在Rails 5中创建一个具有Group和Person模型的应用程序。一个人可以是多个组的成员,一个组可以有多个成员。我知道如何建立这种关系。但是,一个人也可以是许多小组的领导者,而一个小组可以有许多领导者。 Rails提供了一种简便的方法对此进行建模吗?

通常,我会用外键创建一个表来表示每个关系,但是我想知道Rails是否提供了一种更简单的方法来设置它。

2 个答案:

答案 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 }) }