首页 > 解决方案 > Activerecord 计数与连接

问题描述

我有 2 个活动记录关系

class Proxy  
   # capacity integer  
   # country string  
   has_many :configs  
end

class Config  
   belongs_to :proxy  
   # proxy_id  
   # port integer 
end

我想在 activerecord 查询中查找特定国家/地区的所有代理,其中容量小于他的配置,并通过配置计数器对它们进行排序。

我的意思是我正在尝试做类似的事情(伪 activrecord 示例)

Proxy.joins(:configs).where(country: country)
                    .where("capacity > ?", :configs.count)
                    .order_by(:configs.count)

我想也许我纠结于我的问题,它有一个简单的解决方案。

提前致谢!

标签: ruby-on-railsrubyactiverecord

解决方案


这是标准 SELECT ... JOIN ... GROUP BY ... HAVING ... ORDER的SQL 任务:

Proxy.
  joins(:configs).
  group(:id).
  having('proxies.capacity > count(configs.id)').
  order('count(configs.id)')

推荐阅读