Подсчет активных записей с объединением - PullRequest
0 голосов
/ 16 октября 2018

У меня есть 2 отношения activerecord

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

class Config  
   belongs_to :proxy  
   # proxy_id  
   # port integer 
end

Я хочу найти в запросе activerecord все прокси для конкретной страны, где емкость меньше его конфигов, и упорядочить их по счетчику configs.

Я имею в виду, что я пытался сделать что-то вроде (пример псевдо activrecord)

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

Я думаю, что, возможно, я запутался с моей проблемой, и у нее есть простое решение.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Попробуйте использовать : 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)
0 голосов
/ 16 октября 2018

Это стандарт SELECT ... JOIN ... GROUP BY ... HAVING ... ORDER Задача SQL:

Proxy.
  joins(:configs).
  group(:id).
  having('proxies.capacity > count(configs.id)').
  order('count(configs.id)')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...