Порядок по количеству связанных записей

#ruby-on-rails #postgresql

#ruby-on-rails #postgresql

Вопрос:

Итак, я продвинулся немного дальше в проблеме, с которой я столкнулся, у меня есть три модели Trader / Location / Service …. у трейдера есть местоположения, и у трейдера есть много сервисов.

Для экземпляра Location я пытаюсь вернуть всех его трейдеров в порядке убывания количества сервисов. Мне удалось получить 2 запроса для фактического возврата результатов:

 l = Location.find_by_post_code("G1")
l.traders.includes(:services).order('COUNT(services.id) DESC').group("services.id", "traders.id").references(:services)
  

и

 l = Location.find_by_post_code("G1")
l.traders.includes(:services).select("services.id, count(services.id) as count").group("services.id", "traders.id").references(:services)
  

Оба из которых возвращают результаты, но ни один из них на самом деле не упорядочивается по количеству служб вообще, что я делаю не так = (

Комментарии:

1. не могли бы вы опубликовать результат l.traders.includes(:services). выберите («services.id , граф(services.id ) как количество»).group(«services.id «, «traders.id «).ссылки(:сервисы).to_sql

2. Не могли бы вы также показать возвращенные данные из БД.

Ответ №1:

Попробуй это:

 l.traders.includes(:services).select("services.id, count(services.id) as count").group("services.id").order("count DESC")
  

Какую базу данных вы используете?

Комментарии:

1. Postgresql, ваш ответ близок, но я понял, что не могу использовать services.id в разделе выбрать и сгруппировать.

Ответ №2:

 l = Location.find_by_post_code("G1")
l.traders.joins(:services).select("traders.id, traders.name, count(services.id) as count").group("traders.id").order("count DESC")