1

我有一个用户系统,其中一个用户可以与一个组相关联。这工作正常。

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

就这样:

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并在最好是一个数据库请求中获取主组中的所有成员和子组中的所有成员。

这是否可能仅使用基本 Rails 关联,或者我是否需要执行一些自定义 SQL?

4

1 回答 1

0

我会考虑使用单表继承。让所有其他组从父组继承。

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

class Group < ParentGroup; end

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

在此链接http://api.rubyonrails.org/classes/ActiveRecord/Base.html中搜索 Single Table Inheritance

于 2012-06-29T21:07:30.920 回答