0

我有一个多租户 Rails 应用程序,一些模型有一个日期字段。是否可以为每条记录设置不同的时区。我会做一些事情,比如添加一个名为 time zone 的字段然后做Date.somemethodthatsetstimezone(timezone).now()吗?对不起,如果这是一个不好的问题。

4

1 回答 1

3

您的问题的简短回答是肯定的 - 但请确保您知道自己在做什么。

你会想看看ActiveSupport::TimeZoneActiveSupport::TimeWithZone。ActiveSupport::TimeZone 提供时区作为值对象作为字符串访问。例如,您可以将字符串存储'Eastern Time (US & Canada)'在模型中的 time_zone 列中(比如说@project),然后使用 检索时区实例ActiveSupport::TimeZone[@project.time_zone]

您可以使用类似的设置当前进程的时区Time.zone = 'Eastern Time (US & Canada)'。Rails 还允许您在应用程序配置中为您的应用程序配置时区。

您可以调用Time.zone.now以返回当前 ruby​​ 进程设置的时区中的当前时间(作为 的实例ActiveSupport::TimeWithZone)。

您可以调用Time.now.in_time_zone('Eastern Time (US & Canada)')以获取给定时区的当前时间。

您甚至可以为代码块设置时区:

Time.use_zone('Eastern Time (US & Canada)') do
  # do stuff in eastern time

  Time.now 
  # => current eastern time 
end

此方法允许您使用模型中的时区和周围过滤器为整个 rails 请求设置时区:

around_filter :project_time_zone

# actions use project's configured time zone

private

def project_time_zone(&block)
  Time.use_zone(@project.time_zone, &block)
end

其中一种方法应该可以满足您的需求。

于 2013-04-04T07:05:00.653 回答