如何在Rails 4中动态更改ActiveRecord的默认时区?

时间:2015-08-20 05:28:57

标签: ruby-on-rails ruby-on-rails-4 timezone rails-activerecord

在我的application_controller.rb

before_action :set_user_time_zone

def set_user_time_zone
  Time.zone = 'Kolkata'
end

我添加了上面的代码来动态更改时区。但它不会更改时区。我在用户表中为每个用户都有time_zone字段,我想根据当前用户更改time_zone。如何动态更改Time.Zone?

1 个答案:

答案 0 :(得分:0)

您可以在应用程序控制器中放置一个过滤器,该过滤器将应用于所有控制器中的所有操作,以便在处理日期和时间时使用用户的时区。

此代码来自Sebastian Porto,并假设您有一个:time_zone列供用户使用。如果无法获取用户时区,则默认使用UTC。

class ApplicationController < ActionController::Base
  around_filter :set_time_zone

  def set_time_zone(&block)
    time_zone = current_user.try(:time_zone) || 'UTC'
    Time.use_zone(time_zone, &block)
  end
end