has_and_belongs_to_many和has_many_through在相同的模型之间?

时间:2014-10-23 09:00:12

标签: ruby-on-rails has-many-through has-and-belongs-to-many

我有一个模型person和一个模型group。有两种人:领导者领导小组和参与者参与。我需要领导者和团体之间的hbtm关系以及参与者和团体之间的关系。通过在模型中提供某种条件(是领导者/是参与者),是否可以使用相同的模型person执行此操作?

class Person < ActiveRecord::Base
  has_and_belongs_to_many :groups
  has_many :participations
  has_many :groups, :through => :participations
  ...
end

我想用一个模型person执行此操作,因为用户是领导者或参与者,但每个用户都应该是一个人,即User belongs_to :person

1 个答案:

答案 0 :(得分:0)

你应该只为一个人而不是更多。你可以这样做:

class Person < ActiveRecord::Base
  has_many :relations
  has_many :groups, :through => :relations
   ...
end

class Group < ActiveRecord::Base
  has_many :relations
  has_many :persons, :through => :relations
  ...
end

class Relation < ActiveRecord::Base
  belongs_to :person
  belongs_to :group
end
表&#39>表&#39;关系&#39;应该在person_id和group_id旁边,还有一个字段,例如&#39; leader&#39;值应为true / false或1/0。因此,如果该组的人是领导者,则该值应为1 / true,否则为0 / false