Dado que recibí User.attachments y Attachment.visits como un entero con el conteo de números.¿Cómo se suman todas las propiedades de una colección anidada?
¿Cómo puedo contar fácilmente todas las visitas de todas las imágenes de ese usuario?
Dado que recibí User.attachments y Attachment.visits como un entero con el conteo de números.¿Cómo se suman todas las propiedades de una colección anidada?
¿Cómo puedo contar fácilmente todas las visitas de todas las imágenes de ese usuario?
user.attachments.sum(:visits)
Esto debería generar una consulta SQL eficiente como esto:
SELECT SUM(attachments.visits) FROM attachments WHERE attachments.user_id = ID
user.attachments.map{|a| a.visits}.sum
o 'user.att achments.map (&: visits) .sum' – rubyprince
o 'user.attachments.sum (&: visits)' – Jordan
De hecho, la solución de @ Jordon es la mejor. – Calin
También hay inject
:
user.attachments.inject(0) { |sum, a| sum + a.visits }
La gente en general (y con razón) odian inject
, pero ya se han mencionado las otras dos formas principales de lograr esto, pensé que puedo también tirarlo allí afuera. :)
Los siguientes trabajos con Plain Old Rubí objetos, y sospecho que lo que sigue es marginalmente más rápido que el uso de count += a.visits
, además de que tiene un icono gestual en ella:
user.attachments.map(&:visits).inject(:+)
Hahahahah de lejos, la mejor respuesta jajaja – facundofarias
¿Qué pasa si desea sumar un alcance de visitas. Por ejemplo, visitas tiene ámbito: activo, -> {donde ('atributo IS NOT NULL')}. Algo así como "user.attachments.sum (visits.active)? – doug