Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:如何为整个应用程序将默认时区设置为特定时区?_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord_Timezone - Fatal编程技术网

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

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.

如何设置Rails和ActiveRecord的默认时区?我有很多地方可以显示时间(例如在数据库中创建一些实例等)。时间显示在我的当前时区中。我是否应该配置我在托管平台上使用的Rails/ActiveRecord或*nix distributive

我试图将其添加到
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的话)时间?