2013-03-08 72 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 

每次调用此方法时,它会重新评估等的时间会发生变化。