仅在控制器中设置Time.zone

时间:2018-05-22 19:22:09

标签: ruby-on-rails ruby ruby-on-rails-5

我有一个Rails应用程序,我在控制器中的before操作中为每个请求设置时区,如下所示:

Time.zone="Central Time (US & Canada")

我可以用

打印时区
puts Time.zone

这就是打印出来的东西。

(GMT-06:00) Central Time (US & Canada)

所有这一切都正常,直到我在我的模型中调用方法。当我这样做时,时区丢失了,我必须在我的模型中再次设置Time.zone

如果我在我的模型中调用下面的方法,则从我的控制器打印出UTC时间。

模型

def self.import_file(file)
    puts Time.zone
    # this prints out UTC time. 
end

这是预期的行为,还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

Time.zone被设置为线程变量。如果你在一个不同的线程(即后台工作者,进程,irb),Time.zone将是你的应用程序的默认值(通常在config/application.rb中设置)。

如果您不在不同的主题/流程中,请确保您不小心打电话给Time.zone = nil。您还应该查看http://api.rubyonrails.org/classes/Time.html#method-c-use_zone处的Rails权威Time.use_zone示例。