2012-10-06 24 views
0

我有報告,其中包含日期。現在我想在一年的某個特定周內找到所有的報告。我所擁有的是這樣的:按年份周查找ActiveRecord對象

class Model < ActiveRecord::Base 
    attr_accessible :date 

    def self.find_by_week(week, year) 
    Model.all.find_all do |model| 
     model.date.year == year and model.date.s­trftime("%­W").to_i == week 
    end 
    end 
end 

但恐怕當軟件已經積累了數千預計其報告該解決方案可能不是很高性能。有更好的解決方案嗎?

如果重要,我在開發中使用SQLite3,但生產數據庫將是MySQL。雖然我想一個解決方案,爲DB-獨立的,如果可能的話...

回答

2

您可以傳遞一個日期範圍:

dates = Date.commercial(2012,40)..Date.commercial(2012,41) 
Model.where(:date => dates) 

有更多可用的參數Date.commercial - 上述會給你週一至週一。要設置更具體的日期/時間,請輸入look at the docs

+0

那麼它包括第二個星期一?我必須刪除最後一天? – Lanbo

+0

我認爲它會在10月1日星期一00:00:00到10月8日星期一00:00:00,這意味着第二個星期一不會被包括在內,但是我沒有用過這麼多。我會建議設置一些測試。 –

+0

我已經解決了'date.take(7)',這似乎是正確的。 – Lanbo