我正在尝试从 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。对此的任何见解都是有帮助的。谢谢