2011-03-08 19 views

cevap

18

Kullanım ActiveRecord::Base#sum:

user.attachments.sum(:visits) 

Bu böyle verimli bir SQL sorgusu oluşturmak olmalıdır: Düz Eski Yakut Nesneler ile

SELECT SUM(attachments.visits) FROM attachments WHERE attachments.user_id = ID 
+0

Ziyaretlerin kapsamını özetlemek isterseniz. Örneğin, ziyaretlerin kapsamı vardır: active, -> {where ('öznitelik NULL değil')}. Bir şey "user.attachments.sum (visit.active)? – doug

12
user.attachments.map{|a| a.visits}.sum 
+5

veya "user.att achments.map (&: ziyaretleri) .sum' – rubyprince

+10

veya 'user.attachments.sum (&: ziyaretleri)' – Jordan

+0

Gerçekten de, Jordon'un çözümü en iyisidir. – Calin

5

da inject var:

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

İnsanlar genellikle (haklı olarak) inject istemem, ama bunu gerçekleştirmenin diğer iki temel yolu söz beri, ben de atmak düşündüm dışarıda. :)

2

aşağıdaki eserlerini ve aşağıdaki marjinal hızlıdır şüpheli count += a.visits'u kullanmaktan daha fazlası, ayrıca içinde bir ifade vardır:

user.attachments.map(&:visits).inject(:+) 
+0

Hahahahah bugüne kadar, en iyi cevap hahaha – facundofarias

İlgili konular