通过连接进行ActiveRecord计数

时间:2018-10-16 14:10:56

标签: ruby-on-rails ruby activerecord

我有2个ActiveRecord关系

RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

我想在activerecord查询中找到特定国家/地区的代理(容量小于其配置),然后通过配置计数器对其进行排序。

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

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

class Config  
   belongs_to :proxy  
   # proxy_id  
   # port integer 
end

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

谢谢!

2 个答案:

答案 0 :(得分:1)

这是standard SELECT ... JOIN ... GROUP BY ... HAVING ... ORDER SQL任务:

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

答案 1 :(得分:1)

尝试在关联中使用:counter_cache

class Proxy  
 # configs_count integer
 has_many :configs  
end

class Config  
 belongs_to :proxy, counter_cache: true
end

然后您可以执行以下操作:

Proxy.where(country: country)
     .where("capacity > ?", :configs_count)
     .order_by(:configs_count)