TimeZone(rails)

timezoneの変更

通常はrailsの表示はutcで、データベースの書き込みもutcで行われる。
表示のみjstにするか、データベースをjstにするかでやり方が変わる。

基本的な考え方は、railsの表示時間とDBに保存する時間の2つ。
加えてDBからviewに出力する際にrailsの表示時間と異なる場合に変換をかませるか。
ここに注意しておけばOK。

db: utc 表示: jst

config/application.rb

config.time_zone = 'Tokyo'
config.active_record.default_timezone = :utc 

active_record.defalult_timezoneは書かなくてもutcがデフォルトになる。

views/view.html.erb

created_at.in_time_zone('Tokyo')

in_time_zone(‘Tokyo’)をつけることで表示上+9時間してくれる。

データベースもjstへ変更する。

config/application.rb

config.active_record.default_timezone = :local 
(ローカルがjstに設定されていること前提、サーバーがjstである必要あり)

time_zone変更時にデプロイでrake aborted!

requireと同レベルにconfig.time_zoneを書くと、
NameError: undefined local variable or method `config’ for main:Object
が出て困った。

正しくはmodule Projectの中に入れます。以下のように。

require_relative 'boot'

require 'rails/all'
Bundler.require(*Rails.groups)

module Project
  class Application < Rails::Application
    config.generators do |g|
      g.stylesheets false
    end
    config.i18n.default_locale = :ja
    config.time_zone = 'Tokyo'
  end
end

コメント