1

ユーザーをグループに関連付けることができるユーザーシステムがあります。これは正常に機能します。

今、私はユーザーをグループに関連付けることができる必要があり、そのグループは別のグループに関連付けることができます。親グループとすべての子グループの両方に属するユーザーを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フェッチし、できれば1つのDBリクエストで、メイングループのすべてのメンバーと子グループのすべてのメンバーをフェッチするとします。

これは基本の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

于 2012-06-29T21:07:30.920 に答える