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.rb
や config/route.rb
も容赦なく書き換えようとしてくるので、diffを見たりして注意する必要がある。
コードを変更した点
skip_before_action
同一ファイル内にcallback関数がない場合、raiseオプションにfalseを設定しないと、ArgumentErrorが出るように変更された。sourceryというgemのcallbackを使うところで変更が必要になった。
skip_before_filter :require_login, raise: false
本体のコードの該当箇所
- rails/callbacks.rb at 6dfab475ca230dfcad7a603483431c8e7a8f908e · rails/rails
- rails/callbacks.rb at 6dfab475ca230dfcad7a603483431c8e7a8f908e · rails/rails
時間の扱い
いままでは、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時間すると日をまたぐ場合がある。そのため、ActiveSupportのTime.change(day:n)
を用いて日にちを変更する必要は残った。
参考
Rails で DB の Time 型を扱う - おもしろwebサービス開発日記
雑感
rakeコマンドをつかわなくても、railsコマンドでdb:migrate等をできるようになっててよい。
あと、 config.active_record.time_zone_aware_types
のおかげで時間をJSTとして扱えるのがほんとに最高。
神っぽい。