Я пытаюсь создать отчет на экране истории транзакций учета. В большинстве ситуаций это одна строка отображения на запись в таблице AccountingTransaction
. Но иногда есть транзакции, которые я хочу показать конечному пользователю как одну транзакцию, которая действительно за кулисами, две учетные транзакции. Это вызвано отсрочкой доходов и расторжением фонда, поскольку это приложение является приложением для учета средств.Отчет с использованием группы Rails ActiveRecord по
Если я показываю все строки один за другим, эти двойные записи кажутся странными для пользователя, так как разделение и отсрочка фонда «за кулисами». Поэтому я хочу сверлить все связанные транзакции в одну строку отображения на экране.
У меня есть запрос теперь использует группу по группе соответствующих сделок
@history = AccountingTransaction.where("customer_id in (?) AND no_download <> 1", customers_in_account).group(:transaction_type_id, :reference_id).order(:created_at)
как я Переберите я получаю транзакции, сгруппированных, как я хочу, но я борюсь с тем, как вывести общую сумму из ' кредитное поле для всех записей в группе. (Он показывает только первую запись группы). Если я добавлю .sum(:credit)
к моему запросу, он, конечно же, вернет суммы, как я хочу, но не все остальные данные.
Есть ли способ для меня сгруппировать эти записи, как в моем @history
запросе, а также получить сумму кредитного поля для каждой соответствующей группы?
* Добавление * То, что я действительно хочу, это то, что следующий SQL запрос будет дать мне.
SELECT transaction_type_id, reference_id, sum(credit)
WHERE customer_id in (21,22,23,24) AND no_download <> 1
GROUP BY reference_id, transaction_type_id ORDER BY created_at
Я уверен, что вы могли бы использовать Arel, как вышеписанные этот пост: http://stackoverflow.com/questions/5972336/how-to-sum-a-grouped -column-in-arel – Magnuss
Похоже, что это может сработать. Раньше я не использовал AREL, поэтому мне придется немного в него разобраться. Я пробовал то, что предлагает плакат, в том сообщении, к которому вы привязались, но он не будет присваивать ничего переменной, когда я тестирую его на консоли. Я должен что-то упустить. – circle1