ActiveRecordオブジェクトの配列に対して操作を実行するRubyのActiveRecordオブジェクトのカスタムゲッター関数を定義するにはどうすればよいですか?
たとえば、オブジェクトの配列の加重平均を返したいと思います。したがって、フィールドamount(100、200、300)とdefault_rate(.1、.2、.3)を持つLoanオブジェクト(1,2,3)がある場合、通常のActiveRecord関数Loan.find(1).amountを使用します。 100を返す必要があり、Loan.find(2).default_rateは2を返す必要があります。
ただし、Loan.find(2,3).default_rateがある場合は、デフォルト率の加重平均である.26を返すようにします。SQL selectステートメントを使用してこれを実行できることはわかっていますが、ActiveRecordゲッターを「オーバーロード」して、単一のLoanオブジェクトではなくLoanオブジェクトの配列でゲッターを呼び出すときに関数を定義できるようにするにはどうすればよいですか?
ローンテーブルには、amount id、amount、および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で定義されていないというエラーが発生します