Railsを5.0にupdateした時のメモ

方法

Gemfileを編集する。Railsのversionを最新版に指定してbundle update

gem 'rails', '5.0.0.1' # そのときの最新版を指定してくれ!

Rails5に対応していないversionを指定されているgemがあったりするのでエラーメッセージに応じてversion指定を抜く必要がある。

bin/rails app:update で設定ファイルをRails5向けに書き換えてくれるが、config/application.rbconfig/route.rb も容赦なく書き換えようとしてくるので、diffを見たりして注意する必要がある。

コードを変更した点

skip_before_action

同一ファイル内にcallback関数がない場合、raiseオプションにfalseを設定しないと、ArgumentErrorが出るように変更された。sourceryというgemのcallbackを使うところで変更が必要になった。

skip_before_filter :require_login, raise: false

本体のコードの該当箇所

時間の扱い

いままでは、Active Recordが時間をUTCで保存するため、JSTで時間を扱いたいとき、Time.zone.utc_to_localでいちいち変換する必要があった。

Rails5ではconfig/application.rbに以下のように書くことで、DBにUTCで入っている時間をJSTとして扱えるようになり、Time型の扱いが楽になった。

config.time_zone = 'Tokyo'
config.active_record.time_zone_aware_types = [:datetime, :time]

しかし、DBのTime型には日にちが入らないため、UTCからJSTに変換する際、+9時間すると日をまたぐ場合がある。そのため、ActiveSupportTime.change(day:n)を用いて日にちを変更する必要は残った。

参考

Rails で DB の Time 型を扱う - おもしろwebサービス開発日記

雑感

rakeコマンドをつかわなくても、railsコマンドでdb:migrate等をできるようになっててよい。 あと、 config.active_record.time_zone_aware_types のおかげで時間をJSTとして扱えるのがほんとに最高。 神っぽい。