情况
所以这是我的情况的简化版本:
我有一个付款模式。它具有以下属性:
- 支付金额
- 付款日期
我有一个交易模型。它具有以下属性:
- 交易说明
- 交易金额
- 付款编号
笔记:
- 一次支付可以应用于多个交易(即一次支付
has_many
交易)。 - 可以通过将属于付款的每笔交易的交易金额相加来计算付款的余额。
我目前正在使用 SQL join、group 和 sum 聚合函数计算剩余余额。我在我的付款模型中添加了一个范围来执行此操作:
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