Как суммировать все свойства вложенной коллекции? - PullRequest
10 голосов
/ 08 марта 2011

Учитывая, что я получил User.attachments и Attachment.visits как целое число с числом.

Как я могу легко посчитать все посещения всех изображений этого пользователя?

Ответы [ 4 ]

18 голосов
/ 08 марта 2011

Использование ActiveRecord :: Base # sum :

user.attachments.sum(:visits)

Это должно сгенерировать эффективный SQL-запрос, подобный следующему:

SELECT SUM(attachments.visits) FROM attachments WHERE attachments.user_id = ID
15 голосов
/ 08 марта 2011
user.attachments.map{|a| a.visits}.sum
5 голосов
/ 08 марта 2011

Там также inject:

user.attachments.inject(0) { |sum, a| sum + a.visits }

Люди обычно (и совершенно справедливо) ненавидят inject, но, поскольку были упомянуты два других основных способа достижения этого, я подумал, что я могу также выбросить это туда :)

2 голосов
/ 09 марта 2011

Следующее работает с Plain Old Ruby Objects, и я подозреваю, что следующее немного быстрее, чем при использовании count += a.visits, плюс в нем есть смайлик:

user.attachments.map(&:visits).inject(:+)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...