在带有mysql的Rails 3中,假设我有两个模型,Customers和Purchases,显然是购买belongs_to客户.我想找到2个或更多订单的所有客户.我可以简单地说:
Customer.includes(:purchases).all.select{|c| c.purchases.count > 2}
Run Code Online (Sandbox Code Playgroud)
但实际上,上面的行会查询Customer.all和Purchase.all的大小,然后在ruby中执行"select"类型处理.在一个大型数据库中,我更愿意避免在ruby中进行所有这些"选择"计算,并让mysql进行处理,只给我合格客户列表.这要快得多(因为mysql更多地调整了这一点)并且显着减少了数据库的带宽.
不幸的是,我无法用rails中的构建块(where,having,group等)来实现代码,以实现这一点,这些内容符合(psudo-code):
Customer.joins(:purchases).where("count(purchases) > 2").all
Run Code Online (Sandbox Code Playgroud)
我将满足于直接的MySql解决方案,尽管我更喜欢在优雅的rails框架中解决这个问题.