我如何在Rails中解决这种关联?

时间:2012-06-29 16:55:01

标签: sql ruby-on-rails associations

我有一个用户系统,用户可以在其中与一个组关联。这很好。

现在我需要能够将用户与组关联,并且该组可以与另一个组关联。我希望能够在一次操作中获取属于父组和所有子组的用户。

所以它是:

Group -> Group -> Member

这就是今天的设置:

class Group < ActiveRecord::Base

  belongs_to :customer

  has_many    :child_groups, class_name: "Group", foreign_key: 'parent_group_id'
  belongs_to  :parent_group, class_name: "Group"

  has_many :memberships, :class_name => "Group::Membership"
  has_many :members, :through => :memberships
end

Group::Membership看起来像这样:

class Group::Membership < ActiveRecord::Base

  belongs_to :member
  belongs_to :group
  has_many :customers, :through => :group

end

假设我使用命令Group.first.members获取一个具有多个与之关联的子组的组,并获取主组中的所有成员和子组中的所有成员,最好是一个DB请求。< / p>

仅使用基本Rails关联是否可行,还是需要执行一些自定义SQL?

1 个答案:

答案 0 :(得分:0)

我会研究使用单表继承。让所有其他组继承父组。

class ParentGroup < ActiveRecord::Base; 
 belongs_to :user
end

class Group < ParentGroup; end

然后,您将能够查询ParentGroup.all并查看每个组。

在此链接中搜索单表继承 http://api.rubyonrails.org/classes/ActiveRecord/Base.html