2010-12-04 5 views
0

私のアプリでは、2 peopeは友人関係のモデルを介して友人になることができ、彼らは他の友人にどれくらいの金額を貸し出したかの記録を作成することができます。Rails 3 - 関連拡張メソッドでproxy_targetsのwhereやsumなどのメソッドをどのように使用しますか?

私は@userはに負っているか、この友情に彼らの友人が負っているどのくらい戻りますfriendship.receipts.balance_for(@user)@この

のようなものを作りたいです。それが返された場合、すなわち-50彼らは$ 50借りたり、その正は、それらをIDも(日付、タグなどによって)ライブフィルタリングで使用することができ、さらに適用範囲このすなわちになりたい$ 50

を負っている場合は、この

をしたいと思います@ friendship.receipts.where(:タグ=>「食料品).balance_for(@user)

私の最初の試みは、友情モデル

class Friendship < ... 
    has_many :receipts do 
    def balance_for(user) 
     user_total_spent = proxy_target.sum(:value, :payer_id => user.id) 
     friend_total_spent = proxy_target.sum(:value, :payer_id => friend.id) 
     return user_balance = user_total_spent - friend_total_spent 
    end 
    end 
end 

残念ながら方法和カントに関連の拡張機能を作成することでしたplain_tを返すので、proxy_targetで使用する配列ではなく、Activerecord :: Relationクラスのsumは期待しています。

この問題を回避するにはどうすればよいですか? Idはスコープ付きの結果で呼び出すことができるメソッドを作成するのが好きです。

答えて

1

明示的な受信者なしで単にsumを呼び出すとよいでしょう。私は同様の問題の解決策を探していて、ここにあなたの質問への答えのように見えます:http://withoutscope.com/2008/8/22/don-t-use-proxy_target-in-ar-association-extensions

残念ながら、私の問題は解決しません。私は、モジュール名がプロキシの所有者のメンバであるモジュールで、アソシエーション拡張を介して取得されたモデルをどのように拡張するかを調べようとしています。

関連する問題