1

在生产中,方法Time.zone.now总是返回相同的值,同时Time.now返回正确的系统时间。

这里有一个例子:

横幅.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-03-06 08:06:46 -0300

有谁知道为什么?

4

1 回答 1

3

这是因为在加载类时对范围进行了一次评估。

你应该这样定义它:

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

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

于 2013-03-08T19:02:07.583 回答