Rails 3 - как вы используете такие методы, как where и sum для proxy_targets в методах расширения ассоциации? - PullRequest
0 голосов
/ 04 декабря 2010

в моем приложении 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.

Какой хороший обходной путь? Мне бы хотелось создать метод, которыйможет быть вызвано по результатам в области.

1 Ответ

1 голос
/ 06 декабря 2010

Возможно, вы захотите попробовать просто вызвать сумму без явного получателя. Я ищу решение похожей проблемы и нашел ответ на ваш вопрос здесь: http://withoutscope.com/2008/8/22/don-t-use-proxy_target-in-ar-association-extensions

К сожалению, это не решает мою проблему. Я пытаюсь выяснить, как расширить модели, полученные с помощью моего расширения ассоциации, с помощью модуля, имя которого является членом владельца прокси.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...