在产生时,方法Time.zone.now
总是在Time.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-03-06 08:06:46 -0300
任何人都知道为什么?
答案 0 :(得分:3)
这是因为在加载类时,范围会被评估一次。
您应该像这样定义:
def self.active
where("'#{Time.zone.now}' between start_date and end_date")
end
每次调用此方法时,都会重新评估它,因此时间会发生变化。