【发布时间】:2010-11-01 17:42:59
【问题描述】:
情况
所以这是我的情况的简化版本:
我有一个付款模式。它具有以下属性:
- 付款金额
- 付款日期
我有一个交易模型。它具有以下属性:
- 交易说明
- 交易金额
- 付款 ID
注意事项:
- 一次付款可应用于多笔交易(即一次付款
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
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-3 join rails-models