0

У меня есть следующие строки кода, который работает в SQLite, но в Postgres не:Группировка в Ruby On Rails с использованием Postgres

@income_by_category = SoldCategory.group(:category_name).having("branch_id=?", @branch_id).sum(:total).to_a 

Это в основном группируя все SoldCategory по :category_name, которые имеют один и тот же @branch_id, добавив все свои :total и преобразуя их в массив. Я использую его для предоставления некоторых данных на некоторых диаграммах. Это дает мне результат, аналогичный этому:

[['shoes', 5000], ['pants', 6000], ['shirts', 7000]] 

Как достичь такого же результата с помощью PostGress?

+0

Что SQL генерирует ActiveRecord? – Georges

ответ

1

Значит, вы хотите взять все sold_categories, у которых есть branch_id, а затем найти суммы в категории? Ваш подход немного ушел, HAVING - это не то, что вы ищете. SQL вы хотите просто:

select category_name, sum(total) 
from sold_categories 
where branch_id = ? 
group by category_name 

и переводит это с ActiveRecord:

SoldCategory.where(:branch_id => @branch_id).sum(:total, :group => :category_name) 

Это даст вам хороший Hash, который выглядит следующим образом:

{ 'shoes' => 5000, 'pants' => 6000, 'shirts' => 7000 } 

После у вас это исправлено, следующим шагом будет установка PostgreSQL в среду разработки, чтобы вы могли разрабатывать и развертывать с использованием той же базы данных. Существует множество небольших различий между базами данных, из-за которых ORM не может защитить вас; переносимость базы данных - это миф, если ваши потребности не являются абсурдно простыми или вы пишете свой собственный уровень переносимости и тестовый тестовый тестовый тестовый тест, а затем тестируете еще несколько, а затем запускаете больше тестов, чтобы убедиться, что вы протестировали каждый путь кода, который вы используете в каждой необходимой вам базе данных около.

+0

Это сработало отлично! Спасибо!! – MXV