Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 时区现在锁定在生产中_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 时区现在锁定在生产中

Ruby on rails 时区现在锁定在生产中,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在production中,方法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_da

在production中,方法
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))
时区现在总是2013-03-06 08:06:46-0300


有人知道为什么吗?

这是因为在加载类时,作用域只计算一次

您应该这样定义它:

def self.active
  where("'#{Time.zone.now}' between start_date and end_date")
end
每次调用此方法时,都会重新评估它,因此时间会发生变化