2013-04-04 22 views
0

我有一個多租戶導軌應用程序和一些模型有一個日期字段。是否有可能爲每個記錄有不同的時區。我會做一些類似於添加時區的字段,然後執行Date.somemethodthatsetstimezone(timezone).now()?對不起,如果這是一個壞問題。Mutli Tenant App時間區域導軌

回答

2

你的問題的簡短答案是肯定的 - 但要確保你知道你在做什麼。

你會想看看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 

這種方法允許你設置時區爲整個軌請求,利用從模型的時區和周圍過濾器:

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 

其中一種方法應該爲您提供您所需要的。