BUNSEN

個人的な学習ログ

rails のバージョンアップする(5.0 -> 5.2)

概要

とある学習コンテンツを使用してrailsについて学習し、一通り終了したところでrailsをバージョンアップしてみた。 いろいろと修正すべきところがあったのでそれについて残してみる。 railsはDockerコンテナ上に立っているため使用したコマンドをすべてDocker経由のもの。 railsサーバのローカルでコマンドを使用する場合はdocker-compose *** webを排除すれば使用できると思われる。(未検証)

環境

Docker for Windows 上の railsコンテナ

アップデート実行

  1. Gemfileを更新する

     - gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
     + gem 'rails', '5.2.0'
    
  2. railsをアップデートする

     docker-compose run web bundle update rails
    
  3. Dockerイメージのリビルド

     docker-compose build
    

バージョン差分修正

  1. version5.2より削除された設定の削除 config/initializers/new_framework_default.rbから該当箇所を削除

     - ActiveSupport.halt_callback_chains_on_return_false = false
     + # ActiveSupport.halt_callback_chains_on_return_false = false
    
  2. form_withヘルパーの実装 form_withヘルパーの使用が推奨されているらしいので変更する 参考ページに従って編集 要約すると今まで用途によって使い分けていたform_forヘルパーとform_tagヘルパーのどちらにも対応したform_withヘルパーができましたよというお話。

  3. 外部キー制約のデフォルト値の変更 version5.1からの変更だそうです。 参照元DBで生成される外部キー制約のデフォルトの型がint->bigintに変更になっています。以下のいずれかの対応が必要になる。

    • 参照先DBのキーカラムのタイプをbigintにする

        + t.string :member_id, type: :bigint
      
    • 参照元DBの外部キーのタイプをintにする

        - t.references :member, foreign_key: true
        + t.references :member, foreign_key: true, type: :integer
      
  4. redirect_to :back廃止 前のページに戻るのに使用していたリダイレクト文ですが廃止されてしまったようです。

     - redirect_to :back
     + redirect_back(fallback_location: :me)
    

    flash を使用していた場合は

     - redirect_to :back, flash {
     -   member: @member,
     -   messages: @member.error.messages
     - }
     + redirect_back(fallback_location: new_member_path, flash: {
     +     member: @member,
     +     messages: @member.error.messages
     + }