2013-03-08 79 views
1

在生產中,方法Time.zone.now始終返回相同的值,而Time.now返回 正確的系統時間。Time.zone.now鎖定生產

這裏一個例子:

banner.rb

scope :active, where("'#{Time.zone.now}' between start_date and end_date") 

日誌此範圍的:

SELECT `banners`.* FROM `banners` WHERE ('2013-03-06 08:06:46 -0300' between start_date and end_date) AND ((`banners`.`store_id` = 1 AND `banners`.`spot_id` = 3 AND `banners`.`at_home` = 1)) 

Time.zone.now總是2013年3月6日08:06 :46 -0300

任何人都知道爲什麼?

回答

3

這是因爲在加載類時,範圍會被評估一次。

你應該把它定義是這樣的:

def self.active 
    where("'#{Time.zone.now}' between start_date and end_date") 
end 

每次調用此方法時,它會重新評估等的時間會發生變化。