如何在 Ruby 中为 ActiveRecord 对象定义自定义 getter 函数,以对 ActiveRecord 对象数组执行操作?
例如,我想返回一组对象的加权平均值。因此,如果我有带有字段数量(100、200、300)和 default_rate(.1、.2、.3)的贷款对象(1、2、3),那么使用普通的 ActiveRecord 函数 Loan.find(1).amount应该返回 100,Loan.find(2).default_rate 应该返回 0.2。
但如果我有 Loan.find(2,3).default_rate,我希望它返回默认利率的加权平均值,即 0.26。我知道我可以使用 SQL 选择语句来做到这一点,但是当我在 Loan 对象数组而不是单个 Loan 对象上调用 getter 时,如何“重载”ActiveRecord getter 以允许定义函数?
贷款表具有字段金额 id、金额和 default_rate
class Loan < ActiveRecord::Base
module Collection
def default_rate
sum(:default_rate * :amount) / sum(:amount)
end
end
end
class LoanGroup
has_many :loans, :extend => Loan::Collection
end
#Then I try
obj = LoanGroup.where('id < 10')
这给了我 has_many 在 LoanGroup 中未定义的错误