【发布时间】:2011-11-02 23:09:59
【问题描述】:
我在我的 rails 3 应用程序中设置了以下模型:
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
我正在尝试将尽可能多的查询卸载到数据库中,但我正在尝试通过他们的(可能很多)组获取联系人数量超过 x 的用户列表。
我可以通过 ruby/rails 代码毫无问题地做到这一点,但它将所有内容加载到内存中,这对于更大的数据集来说可能会很痛苦。
x = 4 # or whatever
User.all.select{ |u| u.groups.collect(&:contacts).flatten.uniq.size > x }
我尝试过以下类似的操作,但无济于事:
User.joins(:groups => :contacts).where('count(contacts.id) > ?', x)
如果联系人不同也很好
在正确的方向上的任何点都很棒,sql 不是我的强项之一,而且我今天似乎脑死了。
【问题讨论】:
标签: sql ruby-on-rails-3 activerecord arel