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

class Session 
    belongs_to :visitor 
    belongs_to :site 
end 

class Site 
    has_many :sessions 
end 

我希望能夠獲取每天訪問網站的人數。由於訪問者與網站沒有直接關聯,但是會話是,我需要爲特定網站獲取所有會話,按天分組,然後按visitor_id分組。下面是一些示例數據(按created_at ASC排序):Rails:按天分組和另一列

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 

理想情況下,我應該看到,在09/27有兩個獨特的訪客,並在09/29也有2個訪問者。我已經試過這樣:

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

但我得到這個回報(這是不正確的):

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

謝謝你們!

+0

如果你想開始通過每一個人網站去,然後開始使用的has_many http://stackoverflow.com/questions/1241352/rails-group-by-multiple-columns – Kelly

回答

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 

沒有控制檯在這裏測試,對不起。

+0

的可能重複:通過 –

+0

謝謝,凱爾。不幸的是,這並不是一天一天的分組。我可以循環播放結果,並將它們放在各自的日子裏,但這似乎是很多不必要的工作。 – 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 

相關問題