2010-12-04 35 views
0

在我的應用程序中,2人可以通過友誼模式成爲朋友,他們可以創建他們借給其他朋友多少錢的記錄。Rails 3 - 如何在關聯擴展方法中使用諸如proxy_targets的where和sum之類的方法?

我想創造這樣的事情

@ friendship.receipts.balance_for(@user),這將返回@user多少欠或由他們的朋友在這種友誼拖欠。即如果返回-50他們欠$ 50,如果其正被拖欠$ 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 

但遺憾的是方法和着關聯擴展在proxy_target上使用,因爲它返回一個普通的數組而不是Activerecord :: Relation類和期望的。

這是一個很好的解決方法嗎?編號喜歡創建一個可以在範圍結果上調用的方法。

回答

1

你可能想嘗試簡單地調用sum而沒有明確的接收器。我正在尋找類似的問題的解決方案,並發現在這裏看起來像你的問題的答案:http://withoutscope.com/2008/8/22/don-t-use-proxy_target-in-ar-association-extensions

不幸的是,它不能解決我的問題。我想弄清楚如何通過模塊名稱是代理的所有者成員的模塊來擴展通過我的關聯擴展檢索到的模型。

相關問題