в моем приложении 2 peope могут быть друзьями через модель дружбы, и они могут создавать записи о том, сколько денег они одолжили другому другу.
Я хочу создать что-то вроде этого
@friendship.receipts.balance_for (@user), который будет возвращать сумму, которую @user должен или должен их друг в этой дружбе.т. е. если он возвращает -50, он должен 50 долл., или, если он положительный, он должен 50 долл.
Я также хотел бы иметь возможность расширить эту область для использования в реальной фильтрации (по датам, тегам и т. д.), т.е.*
@friendship.receipts.where (: tag => "бакалейные товары) .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
но, к сожалению, метод sum нельзя использовать в proxy_target, потому что он возвращает простой массив, а не ожидаемую сумму класса Activerecord :: Relation.
Какой хороший обходной путь? Мне бы хотелось создать метод, которыйможет быть вызвано по результатам в области.