Rails:如何将整个应用程序的默认时区设置为特定时区



如何为 Rails 和 ActiveRecord 设置默认时区?我有很多地方可以消磨时间(例如在数据库中创建某个实例等)。时间以我当前的时区显示。我应该以某种方式配置我在托管平台上使用的 Rails/ActiveRecord 或 *nix 发行版吗?

我尝试将其添加到application.rb文件中,但没有任何结果:

config.time_zone = 'Moscow'
config.active_record.default_timezone = :local

我也尝试使用

config.time_zone = 'Moscow'
config.active_record.default_timezone = "Moscow"

但在这种情况下,我会收到警告

warning: :database_timezone option must be :utc or :local - defaulting to :local

有没有解决方案可以阻止我更改所有渲染时间的位置?

只需尝试仅在application.rb中使用下面给定的那个,

config.active_record.default_timezone = :local

丢弃

config.time_zone

愿这对你有帮助。

首先:我总是支持不弄乱AR存储时间戳的方式,因为Rails已经为你完成了时间转换的所有魔力。

我假设您希望以当前用户选择的时区显示应用中的时间(或者您已经以其他方式确定了每个用户的时间)。在这种情况下,您在config.time_zone中配置的内容无关紧要,因为您显然想要覆盖它。Rails有一个简洁的机制,称为Time.use_zone

我之前在around_filter中使用它,如下所示:

around_filter :set_time_zone
def set_time_zone
  Time.use_zone(current_user.try(:time_zone) || Time.zone) do
    yield
  end
end

这会将当前请求的时区设置为current_user的time_zone(如果该用户存在)。否则回退到 application.rb 中配置的时区。

Time.use_zone块内,所有时间都显示并保存为该区域。

这种方法非常方便的是,在每个请求之后,时区都会重置为配置的时区。如果您只是更改 Time.zone 并且懒得重置它,它可能会泄漏给其他用户。

我建议你尝试一下,看看它是否做了你想要的,然后再试图理解这一切意味着什么,因为这会让你头晕目眩。不过,如果您有兴趣,我很乐意解释更多关于如何以及为什么

相关内容

  • 没有找到相关文章

最新更新