Rails嵌套连接,其中包含嵌套连接表的计数

Jim*_*mmy 2 sql activerecord arel ruby-on-rails-3

我在rails 3 app中有以下模型设置:

class User << AR::Base
  has_many :groups
end

class Group << AR::Base
  belongs_to :user
  has_many :memberships
  has_many :contacts, :through => :memberships
end

class Membership << AR::Base
  belongs_to :group
  belongs_to :contact
end

class Contact << AR::Base
  has_many :memberships
  has_many :groups, :through => :memberships
end
Run Code Online (Sandbox Code Playgroud)

我试图尽可能多地将此查询卸载到数据库中,但我试图x通过其(可能很多)组获得具有多个联系人数的用户列表.

我可以通过ruby/rails代码执行此操作而不会出现问题,但它会将所有内容加载到内存中,这对于较大的数据集来说可能会很痛苦.

x = 4 # or whatever
User.all.select{ |u| u.groups.collect(&:contacts).flatten.uniq.size > x }
Run Code Online (Sandbox Code Playgroud)

我尝试过做类似以下的事但无济于事:

User.joins(:groups => :contacts).where('count(contacts.id) > ?', x)
Run Code Online (Sandbox Code Playgroud)

此外,联系人也应该是不同的

正确方向上的任何一点都会很棒,sql不是我的优点之一,而且我今天脑子里似乎已经死了.

Jim*_*mmy 9

经过一段时间的努力,我得到了一些帮助,并能够最终确定我的查询

User.select("users.*, count(distinct contacts.id) as num").joins(:groups => :contacts).group('users.id').having('num > 10')
Run Code Online (Sandbox Code Playgroud)