Я пытаюсь получить текущий баланс за транзакцию, простое суммирование (Кредит до записи - Дебиты до записи) в упорядоченном списке.Rails Получение текущего баланса с упорядоченным списком - суммарный виртуальный атрибут
Задача состоит в том, что транзакции часто выводятся из строя, а журналы транзакций сортируются по полю «Даты» (с указанием даты, когда оно должно было быть введено) и «кредитами» сначала (чтобы оно показывало платежи перед счетами в тот же день).
Ассоциация сортируется:
has_many :rent_logs, :order => [:dated, "credit desc"]
Данные представлены Двойники к следующему
[ID] Dated Label Credit Debit Balance [Needs excel summation look]
[20] 1/1/13 payment 600.0 -30 * [Should be: 600 ]
[1 ] 1/1/13 Rent Due 630.0 -30 [Ok here : -30 ]
[2 ] 2/1/13 Rent Due 630.0 -660 [Ok here : -660]
[28] 2/6/13 Late Fee 50.0 -710 [Ok here : -710]
[7 ] 3/1/13 payment 1200.0 -140* [Should be: 490 ]
[3 ] 3/1/13 Rent Due 630.0 -140 [Ok here : -140]
* Indicates massive fail on running balance
Я получил это, выполнив метод ниже в модели аренды.
def balance_to_date(date)
...
rent_logs.where("dated <= ?", date).sum(:credit) - rent_logs.where("dated <= ?" ,date).sum(:debit)
#problem with above is that it calculates day by day, rather than record by record.
end
Проблема заключается в том, что я не хочу, чтобы она отличалась от всех предыдущих в дате интереса. Я хочу, чтобы это изменило все предыдущие по текущей записи.
Нет других очевидных свойств, чтобы делать условия или фильтры, о которых я могу думать. Лучшее решение, которое я могу думать о уродливый один, который, вероятно, должен получить меня уволили ...:
def balance_to_transaction(id)
balance = rent_logs.where("dated <= ?", date-1.day).sum(:credit) - rent_logs.where("dated <= ?" ,date-1.day).sum(:debit)
rent_logs.where("dated = ?", date).each do |transaction|
balance += transaction.credit
balance -= transaction.debit
if (id == transaction.id)
break
end
end
balance
end
Это не может быть правильный способ сделать это?
Я использую Rails 3.2.12, Ruby 1.9.3
Благодаря Фил
Будет ли это работать, если идентификаторы не являются частью заказа? Например, id 5 может появиться сразу после id 6, вместо естественного подсчета 4,5,6 он может выглядеть как 20, ** 6 **, 5,7,8. но я использую: кредит для сортировки, чтобы он мог это сделать ... – nevieandphil
Если идентификатор не является частью заказа, тогда это приведет к некоторому запуску балансовых заказов. Если вы используете кредит для заказа, то нулевые значения vill также смешивают вещи, поэтому я рекомендую вам использовать идентификатор вместо этого, даже в заказе. Он меняет порядок только в данный день, поэтому его не путают. – Matzi
Да, когда я упрощу порядок для ассоциации с [: датированным:: id], это отлично работает и намного проще и чище, чем любая другая реализация, которую я собирал. Спасибо Маци! – nevieandphil