Rails处理用户特定的时区

Dee*_*yal 2 timezone datetime ruby-on-rails ruby-on-rails-4

我想在当前用户登录的时区中显示其他用户创建的日期时间。

我碰到过

config.time_zone = 'Central Time (US & Canada)' and
config.active_record.default_timezone = :local
Run Code Online (Sandbox Code Playgroud)

但是,如何将其设置为当前登录用户的时区,它将保存其他用户在其时区中保存的日期时间,并查看其特定时区中的其他用户?

asi*_*niy 5

在您的中考虑此代码ApplicationController

before_action :user_time_zone, :if => :current_user

def user_time_zone(&block)
  Time.use_zone(current_user.time_zone, &block)
end
Run Code Online (Sandbox Code Playgroud)

它将当前请求包装为Time.use_zone( current_user.time_zone ),这会将应用程序的当前时区设置为整个请求的当前用户所在的时区,并且应该使您所有的时间都显示在当前用户所在的时区中,除非专门转换为时区。

我从这篇文章中拿走了

  • 它应该是“ around_action”,而不是“ before_action” http://railscasts.com/episodes/106-time-zones-revised?view=comments#comment_161729 http://api.rubyonrails.org/v4.2.5.2/ (2认同)

Art*_*jev 5

class ApplicationController < ActionController::Base
  around_filter :set_time_zone

  def set_time_zone
    if logged_in?
      Time.use_zone(current_user.time_zone) { yield }
    else
      yield
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

http://api.rubyonrails.org/v4.2.5.2/classes/Time.html#method-c-zone-3D