группировать результаты по полю на рельсах postgres - PullRequest
0 голосов
/ 20 февраля 2019

Я сейчас изучаю рельсы и пытаюсь сгруппировать результаты запроса по field.

, запрос создается:
@orders = Order.includes(:product).where(user_id: current_user.id, paid: 0).group(:product_id)

Отлично работает на sqlite (dev env), но выдает фатальную ошибку во время работы (postgreSQL).

Ошибка:

ActionView::Template::Error (PG::GroupingError: ERROR:  column "orders.id" must appear in the GROUP BY clause or be used in an aggregate function

Хмм .. что я делаю не такВот?Спасибо

1 Ответ

0 голосов
/ 20 февраля 2019

Если вы хотите сгруппировать в postgres, вам нужно либо напрямую выбрать этот столбец, либо вызвать функцию агрегирования, которая использует этот столбец.Count является такой агрегатной функцией, и вы можете добиться этого в Rails через

@product_counts = Order.where(user: current_user, paid: 0).group(:product_id).count

Postgres автоматически выполнит Count для столбца, с которым вы сгруппированы, что в данном случае равно product_id.Это даст вам хеш-код, подобный следующему:

{ product_id => count }

Для получения дополнительной информации см. Здесь: https://www.tutorialspoint.com/postgresql/postgresql_group_by.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...