我有一个用户系统,用户可以在其中与一个组关联。这很好。
现在我需要能够将用户与组关联,并且该组可以与另一个组关联。我希望能够在一次操作中获取属于父组和所有子组的用户。
所以它是:
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?
答案 0 :(得分:0)
我会研究使用单表继承。让所有其他组继承父组。
class ParentGroup < ActiveRecord::Base;
belongs_to :user
end
class Group < ParentGroup; end
然后,您将能够查询ParentGroup.all并查看每个组。
在此链接中搜索单表继承 http://api.rubyonrails.org/classes/ActiveRecord/Base.html