2011-10-03 21 views
6
class Visitor 
    has_many :sessions 
end 

class Session 
    belongs_to :visitor 
    belongs_to :site 
end 

class Site 
    has_many :sessions 
end 

Her gün için siteye gelen ziyaretçilerin sayısını alabilmek istiyorum. Bir ziyaretçi doğrudan bir site ile ilişkilendirilmediğinden, bir oturum olduğundan, belirli bir site için tüm oturumları güne göre gruplandırmalıyım, ardından da ziyaretçi_adı grubuna göre gruplandırmalıyım. İşte (created_at ASC göre sıralanmıştır) bazı örnek veriler var:Raylar: Güne ve diğer bir sütuna göre gruplandırma

visitor_id site_id created_at 
6   3   2011-09-27 
6   3   2011-09-27 
7   3   2011-09-27 
2   3   2011-09-29 
7   3   2011-09-29 

İdeal olarak, ben 2 benzersiz ziyaretçi vardı ve 09/29 üzerine 2 tekil ziyaretçi de vardı 09/27 üzerinde görmelisiniz. Bu denedim:

Session.group('date(created_at)').group('visitor_id').size 

Ama (doğru değil) karşılığında bu olsun:

# => {Tue, 27 Sep 2011=>3, Thu, 29 Sep 2011=>2} 

teşekkürler çocuklar!

+0

, sonra has_many kullanmaya başlamak her site tarafından gidiş başlatmak istiyorsanız http://stackoverflow.com/questions/1241352/rails-group-by-multiple-columns – Kelly

cevap

8
@counts = Session.group('date(created_at), visitor_id').count 

@counts.each do |(date, visitor), count| 
    puts "#{visitor.name} visted the site #{count} times on #{date}" 
end 
0
Session.where(:created_at => desired_date).group('visitor_id').count 

Burada test etmek için konsol yok, üzgünüm.

+0

Olası yinelenen: –

+0

aracılığıyla Teşekkürler, Kyle. Ne yazık ki, bu onları güne göre gruplandırmıyor. Sonuçlardan geçebilir ve onları kendi günlerine koyabilirdim, ama bu gereksiz bir çok işe benziyor. – imderek

0

@counts = Session.group('date(created_at)'). 
        select("count(distinct sessions.visitor_id) as total, sessions.created_at"). 
        all 

@counts.each do |count| 
    puts "#{count.total} on #{count.created_at.strftime('%m/%d/%y')}" 
end 

İlgili konular