ruby-on-rails - 仅控制器中的时区设置
问题描述
我有一个 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
这是预期的行为还是我错过了什么?
解决方案
Time.zone
设置为线程变量。如果您在不同的线程中(即后台工作者、进程、irb),Time.zone
将是您的应用程序的默认值(通常设置在 中config/application.rb
)。
如果您不在其他线程/进程中,请确保您没有意外调用Time.zone = nil
. 您还应该查看http://api.rubyonrails.org/classes/Time.html#method-c-use_zoneTime.use_zone
上的 Rails 权威示例。
推荐阅读
- css - 在图像周围环绕背景填充
- react-native - 为什么在 React-Native 中使用 Drawer-Navigator 导航到另一个 Navigator 后出现空白屏幕?
- odoo - 在行中添加删除选项,就像我们在购物车中一样
- algorithm - 如何摆脱康威人生游戏中的稳定模式?
- excel - 识别文本格式的单元格是否包含任何字母
- html - 用于获取最近 2 天 IIS 日志文件并检查文件大小差异或增长的 Powershell 脚本
- html - 尝试打开下载的文件时,将表格内容从 Angular 导出到 Excel 会调用错误
- javascript - 如何使用谷歌脚本检查两个谷歌工作表,并将重复项移动到新工作表?
- c - 如何解决 C 中指向不完整类型的解引用指针?
- javascript - 获取图像角度或节点的base64的最佳方法