СИТУАЦИЯ
Итак, вот упрощенная версия моей ситуации:
У меня есть модель оплаты.Он имеет следующие атрибуты:
- Сумма платежа
- Дата платежа
У меня есть модель транзакции.Имеет следующие атрибуты:
- Описание транзакции
- Сумма транзакции
- Идентификатор платежа
ПРИМЕЧАНИЯ:
- Платеж может быть применен к нескольким транзакциям (т. Е. Платеж
has_many
транзакций). - Остаток платежа может быть рассчитан путем суммирования сумм транзакций каждой транзакции, принадлежащей платежу.
В настоящее время я рассчитываю остаток средств с помощью SQL-соединения, группировки и функции суммирования.Для этого я добавил область действия в свою модель платежей:
scope :all_with_balances,
select("payments.*, (payments.payment_amount - sum(transactions.transaction_amount) as remaining_balance").
joins("LEFT JOIN transactions ON payments.id = transactions.payment_id").
group(<list of payments columns>)
Здесь важно отметить дополнительный столбец, remaining_balance
, возвращаемый этим запросом, который рассчитывается следующим образом: (payments.payment_amount - sum(transactions.transaction_amount) as remaining_balance
.
ПРОБЛЕМА
Используя эту область, модели платежей создаются / инициализируются очень хорошо со всеми атрибутами, которые сопоставляются с фактическими столбцами базы данных.Однако я также хотел бы, чтобы они были инициализированы значением remaining_balance
. Возможно ли это?
Я думал, что смогу сделать это, определив метод доступа для этого столбца, но он не сработал.
attr_accessor :remaining_balance