ActiveRecord :: StatementInvalid: PG :: UndefinedColumn: ERROR: столбец "order_count" не существует при .having ('order_count> 5') - PullRequest
0 голосов
/ 23 мая 2018

Контекст: я использую Active Admin и хотел бы определить область, чтобы показать мне любых пользователей с более чем 5 заказами на следующей неделе.Это база данных Postgres в приложении Rails.

User.where(vetting_status: ["Enabled"]).joins(:orders).where('orders.date >= ? AND orders.date <= ?', Date.today, Date.today + 6.days).select('users.first_name, COUNT(orders.id) AS order_count').group('users.first_name').having('order_count > 5').order('order_count desc')

Однако при попытке запустить ее возникает следующая ошибка: ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "order_count" does not exist

Проблема связана с .having('order_count > 5') как я могу выполнить запрос, если я удалю эту часть.Тем не менее, это важная часть, и я не уверен, что я ошибаюсь.Я пробовал .having('gardener.order_count > 5') и .having('orders.order_count > 5'), но ни то, ни другое не сработало.Заранее спасибо за помощь.PS Я нашел несколько ответов и не смог найти решение.

1 Ответ

0 голосов
/ 23 мая 2018

Предложение HAVING оценивается перед SELECT, поэтому сервер еще не знает об этом псевдониме.

Вместо COUNT(orders.id) AS order_count вы должны сделать count(orders) as order_count Вы можете посмотреть здесь
Я пробовал до сих пор, и это работает, надеюсь, это поможет вам.

User.where(vetting_status: ["Enabled"]).joins(:orders).where('orders.date >= ? AND orders.date <= ?', Date.today, Date.today + 6.days).group('users.first_name').having('count(orders) > 5').order('count(orders) desc').select('users.first_name')

В качестве альтернативы вам следует поступить так же, как в приведенном выше запросе: -

count(orders) as order_count

Это также означает, что он получит общее количество заказов пользователя в качестве количества заказов.вот так: -

User.where(vetting_status: ["Enabled"]).joins(:orders).where('orders.date >= ? AND orders.date <= ?', Date.today, Date.today + 6.days).select('users.first_name, count(orders) as order_count').group('users.first_name').having('count(orders) > 5').order('order_count desc')

Следовательно, оба ответа работают без ошибок.: D

...