Ruby on rails Rails:如何为整个应用程序将默认时区设置为特定时区?
如何设置Rails和ActiveRecord的默认时区?我有很多地方可以显示时间(例如在数据库中创建一些实例等)。时间显示在我的当前时区中。我是否应该配置我在托管平台上使用的Rails/ActiveRecord或*nix distributive 我试图将其添加到Ruby on rails Rails:如何为整个应用程序将默认时区设置为特定时区?,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,timezone,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,Timezone,如何设置Rails和ActiveRecord的默认时区?我有很多地方可以显示时间(例如在数据库中创建一些实例等)。时间显示在我的当前时区中。我是否应该配置我在托管平台上使用的Rails/ActiveRecord或*nix distributive 我试图将其添加到application.rb文件中,但没有任何结果: config.time_zone = 'Moscow' config.active_record.default_timezone = :local 我也尝试过使用 config.
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\u zone
中配置的内容是没有意义的,因为您显然想要覆盖它。Rails为此提供了一个整洁的机制,称为
我以前在一个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
这将当前请求的时区设置为当前用户的时区(如果该用户在场)。返回到application.rb中配置的时区,否则返回
在块内,所有时间都显示并保存为该区域中的时间
这种方法非常方便的一点是,每次请求后,时区都会重置为配置的时区。如果您只是更改Time.zone,而不想重新设置它,它可能会泄漏给其他用户
我建议你先试试这个,看看它是否能满足你的需要,然后再去想这意味着什么,因为这会让你头晕。不过,如果您有兴趣,我很乐意解释更多关于如何以及为什么的信息。不确定您的预期结果是什么。当然,显示所有转换为用户查看页面的本地时区的时间是可取的吗?Active record将时间存储为UTC,并且只在外出时将其转换,因此当用户在伦敦时,在莫斯科时间显示这些时间会让人困惑。@马特·吉布森,但这正是我打算做的。我的意思是,当用户在伦敦时,在莫斯科时间显示它们会让人感到困惑,所以你的意思是,正常的本地设置不起作用,而且你在各地都得到UTC(或莫斯科,如果设置为UTC的话)时间?