2010-01-23 31 views
5

所以,我有兩個模型,User和Thing。Rails:在一段時間內從模型中獲取數值

User 
    has_many :things 
end 

Thing 
    belongs_to :user 
end 

Thing有一個與它相關的日期。用戶可能會在一天內添加零個事物,在下一個內容中添加4個內容,在此之後的第7個內容中,幾天後再爲零。你明白了。

現在,我想得到的是過去7天的一組數值。用戶添加了多少東西?我想確保它在沒有添加任何內容的情況下包含零。例如,它可能會返回[0, 4, 7, 0, 0, 11, 2]

這是我確信相當容易做的事情的另一個例子,但我的谷歌福是讓我失望。 :-)

謝謝!

回答

2

羅布的建議將導致7個查詢。

這裏是如何做到這一點在一個查詢:

things_by_date = user.things.count(:group => 'DATE(created_at)', :conditions => ['DATE(created_at) > ?', 7.days.ago]) 
(1..7).collect { |d| things_by_date[d.days.ago.to_date.to_s] || 0 } 
+0

最後一行必須是:「(0..6).collect {| d | things_by_date [d.days.ago.to_date.to_s ] || 0} .reverse「。否則,您會在*今天*之前檢查前7天*,而從昨天到8天前以相反順序檢查。 – 2010-01-23 21:29:03

+0

感謝您的糾正。 – Gdeglin 2010-01-23 21:47:00

1

如何像

class User < ActiveRecord::Base 
    def counts_for_last_week 
    (1..7).collect {|i| things.count(:conditions=>["thing_date = ?', i.days.from_now])] 
    end 
end 
相關問題