【问题标题】:Mutli Tenant App Time Zones rails多租户应用程序时区轨道
【发布时间】:2013-03-26 00:14:17
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails date timezone


    【解决方案1】:

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

    您需要查看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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 2011-05-05
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      相关资源
      最近更新 更多