2

我正在尝试从 rails 4.2.7 升级到 4.2.8 并发现 Rails 的 DateTime 方法在从数据库重新加载时将时区切换到本地的情况,这在 rails 4.2.7 中没有看到。在 Rails 4.2.8 上,我的应用程序的单元测试依赖 DateTime 方法来获取年初,

DateTime.new(2019,1,1,0,0,0)
Tue, 01 Jan 2019 00:00:00 +0000

这个结果值作为对象的一部分传递给
Class:Machinist::ActiveRecord::Blueprint,在该处发生重新加载。

def reload(options = nil)
  clear_aggregation_cache
  clear_association_cache
  self.class.connection.clear_query_cache

  fresh_object =
    if options && options[:lock]
      self.class.unscoped { self.class.lock(options[:lock]).find(id) }
    else
      self.class.unscoped { self.class.find(id) }
    end

  @attributes = fresh_object.instance_variable_get('@attributes')
  @new_record = false
  self
end

instance_variable_get 方法位于,

@attributes = fresh_object.instance_variable_get('@attributes')

将 Rails 4.2.8 上的时区切换到本地(星期一,2018 年 12 月 31 日 16:00:00 -0800),但不是在 4.2.7 上切换时区而不是时间(2019 年 1 月 1 日星期二 00: 00:00 -0800)。类似的方法 Time.new() 对此没有任何问题,因为时区默认设置为本地,

Time.new(2019,1,1,0,0,0)
2019-01-01 00:00:00 -0800

试图查明在 Rails 4.2.8 上发生的变化,不会让时区在重新加载时的 DateTime 方法中持续到 UTC。对此的任何见解都是有帮助的。谢谢

4

0 回答 0