#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")