はじめに
Ruby on Railsの基本設定ですが、少し困った経緯もあり記載。
設定方法
config/application.rb
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.1
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Only loads a smaller set of middleware suitable for API only apps.
# Middleware like session, flash, cookies can be added back manually.
# Skip views, helpers and assets when generating a new resource.
config.api_only = true
### Railsが表示の際に扱うタイムゾーン ←ココ
config.time_zone = 'UTC'
### Rails(Activerecord)がDBへのRead・Writeを行う際タイムゾーン ←ココ
config.active_record.default_timezone = :utc
end
end
設定例
DBへの保存はUTCで画面表示もUTC
config.time_zone = 'UTC'
config.active_record.default_timezone = :utc
DBへの保存はJSTで画面表示もJST(日本時間)
:local
はシステム時間を参照しているのでサーバーのTimezoneを'Asia/Tokyo'にする必要があります!
config.time_zone = 'Tokyo'
config.active_record.default_timezone = :local
DBへの保存はUTCだけど画面表示はJST(日本時間)
config.time_zone = 'Tokyo'
config.active_record.default_timezone = :utc
備考
ActiveRecordでselectを利用してカラム名を指定した場合に日付の戻り型がTime型になっており、上記の設定が自動的に反映されませんでした。特に「DBへの保存はUTCだけど画面表示はJST」で困りました。