在rails上管理ruby中的多个用户时区

时间:2012-11-17 14:01:01

标签: ruby-on-rails ruby-on-rails-3 timezone

我想在默认时区中保存事件,即每当用户提交事件时,它将转换为默认时区,并将保存在数据库中。

每当用户请求事件时,系统将找到该用户时区并在该用户时区中转换日期(从默认格式)并将其显示给用户。

我很难从哪里开始,我看到了许多笔记和文件,但无法弄清楚完成这一过程的完整过程。

我看到了这段代码,但无法理解如何使用它:

before_filter :set_time_zone

def set_time_zone
  Time.zone = current_user.time_zone if current_user
end

1 个答案:

答案 0 :(得分:3)

数据库中的默认时区是UTC。

有两种方法可以做到:

  1. 允许其用户将时区存储在数据库中
  2. 从他们的IP中获取他们的时区
  3. 对于选项1,Rails对时区有很好的支持。 #all method将允许您创建一个下拉列表供他们选择。然后使用用户记录将其保存在数据库中。

    选项2对用户的工作量较少,但也不太准确。有一些服务可以将IP转换为时区。

    要显示给定时区的时间,请使用Time#in_time_zone,或者您可以设置Time.zone,如上所示,它应该正确显示。