Timezone 基本設定
config/environments/production.rb 等、各環境後とに・・・config.time_zone = "Tokyo"ApplicationController でのタイムゾーン設定
class ApplicationController < ActionController::Base
before_filter :set_timezone
def set_timezone
Time.zone = session[:tz] if session[:tz]
end
end
そして、ログインに使うコントローラーで session[:tz] を設定
class User::LoginController < UserRootController
def index
if request.post?
if session[:user_id] = user.authenticate(params[:user][:email], params[:user][:password])
user = User.find(session[:user_id])
session[:tz] = user.time_zone if user.time_zone
flash[:notice] = t('logged_in')
if session[:return_to_path]
redirect_to session[:return_to_path]
else
redirect_to user_root_path
end
else
flash[:error] = t('login.failed')
session[:user_id] = nil
end
end
end
end
その他色々便利なタイムゾーン系メソッド
特定のタイムゾーンで表示する
sometime.in_time_zone("Hawaii")
# @user.time_zone にユーザーのタイムゾーンが入っている場合
sometime.in_time_zone(@user.time_zone)
オフセット、またはタイムゾーン文字列からタイムゾーンを返す
※特定のタイムゾーンがRails に存在するかどうかチェックするのに便利。Cafetalkでは、旧システムからデータを移行する際に使用しました。
ActiveSupport::TimeZone['Tokyo'] > (GMT+09:00) Tokyo ActiveSupport::TimeZone[8] ActiveSupport::TimeZone[+8] > (GMT+09:00) Osaka
タイムゾーンの名前だけを表示
ActiveSupport::TimeZone[+8].name > Osakaオフセットを表示
Time.zone.utc_offset/3600 > -5 など。。。フォームでタイムゾーンのプルダウンリストを表示
<%= f.time_zone_select( :time_zone, nil, :include_blank => true) %>http://mad.ly/2008/04/09/rails-21-time-zone-support-an-overview/
http://marklunds.com/articles/one/402
http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#M001513

0 件のコメント:
コメントを投稿