如何为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
是否有一种解决方案可以阻止我改变那些时间呈现的地方?
答案 0 :(得分:1)
只需在 application.rb ,
中尝试使用下面给出的一个config.active_record.default_timezone = :local
丢弃,
config.time_zone
可以帮助你。
答案 1 :(得分:0)
首先:我总是没有弄乱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并且不打算重置它,它可能会泄漏给其他用户。
我建议你尝试一下,看看它是否能达到你想要的效果,然后再试着将这一切包裹起来,因为这样可以让你头晕目眩。如果你有兴趣的话,我很乐意解释更多关于如何以及为什么的原因。