Рельсы | PG::GroupingError

У меня есть модели автомобилей и car_cities. Я хотел бы получить города, в которых есть хотя бы одна машина.

Ассоциация;

Cars
belongs_to :car_city

CarCities
has_many :cars

Запрос на соединение;

CarCity.joins(:cars).group("cars.car_city_id").having("count(cars.id) > 0")

Это работает в моей локальной среде. Но не работает на производстве.

Ошибка;

An ActionView::Template::Error occurred in search#search_city:

PG::GroupingError: ERROR:  column "car_cities.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT “car_cities".* FROM "car_cities” INNER JOIN "cars"…

^
: SELECT “car_cities".* FROM “car_cities” INNER JOIN “cars” ON “cars"."car_city_id” = “car_cities"."id” WHERE "car_cities"."car_country_id” = $1 GROUP BY cars.car_city_id HAVING count(cars.id) > 0

app/views/search/_search_filters.html.erb:88:in `block in _app_views_search__search_filters_html_erb__3215729544581234245_70286113854020'

person Shalafister's    schedule 17.07.2017    source источник
comment
Почему бы вам не сгруппировать на основе car_cities.id, а не cars.car_city_id. На самом деле это одни и те же записи, верно?   -  person Shabini Rajadas    schedule 17.07.2017


Ответы (2)


Попробуйте это на производственной консоли, если это возможно.

CarCity.joins(:cars).group("car_cities.id").having("count(cars.id) > 0")
person Md. Farhan Memon    schedule 17.07.2017

Не могли бы вы попробовать этот запрос,

CarCity.joins(:cars).group("car_cities.id").having("count(cars.id) > 0")

группировка по cars.car_city_id и car_cities.id соответствует одним и тем же записям. А также при использовании INNER JOIN с моделью Car записи из автомобилей будут выбираться только там, где количество автомобилей больше 1.

person Shabini Rajadas    schedule 17.07.2017