0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails5.2系にバージョンアップで生じたエラーの解決策

Posted at

#はじめに
Rails初心者の私が学習する中で躓いた箇所を備忘録としてまとめました。

#学習教材
フルスタックエンジニアが教える 即戦力Railsエンジニア養成講座

#問題①
GemfileでRailsのバージョンを5.2系に更新し、コンテナを立ち上げた際に下記エラーが発生。

Exiting
web_1  | /app/config/initializers/new_framework_defaults.rb:21:in `<top (required)>': undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module (NoMethodError)

##解決方法
エラーを読めば分かりますが、
/app/config/initializers/new_framework_defaults.rbhalt_callback_chains_on_return_falseメソッドが原因だと読み取れる。
調べたら、Rails5.2よりhalt_callback_chains_on_return_falseが削除されたそうなので、コメントアウトすれば問題を解決できる。

new_framework_defaults.rb
# Do not halt callback chains when a callback returns false. Previous versions had true.
#ActiveSupport.halt_callback_chains_on_return_false = false <=コメントアウトする

#問題②
コマンドからRspecでテスト実施

docker-compose exec web bundle exec rspec ./spec/models/

すると、下記エラーが出力される(エラー抜粋)

rails aborted!
ActiveRecord::MismatchedForeignKey: Column `board_id` on table `board_tag_relations` has a type of `int(11)`.
This does not match column `id` on `boards`, which has type `bigint(20)`.
To resolve this issue, change the type of the `board_id` column on `board_tag_relations` to be :integer. (For example `t.integer board_id`).

##解決方法
5.1系以前はmigrationを作成するとデフォルトでidカラムはintで作成されますが5.1系からはこれがbigintに変更されることが原因。型の異なるカラム同士ではFK制約を張れないので型を統一する必要がある。

  • board_tag_relations.board_idはbigint型
  • boards.idはint型

解決方法としてboard_tag_relations.board_idをint型に修正し、db:migrate:resetすれば問題は解決できる。

#問題
redirect_to :backでエラー発生


redirect_to :back, flash: {
        user: user,
        error_messages: user.errors.full_messages
      }

##解決方法
Rails5.1系から
redirect_to :back => redirect_back(fallback_location: root_path)に置き換わったので修正すれば問題解決。

redirect_back(fallback_location: "http://localhost", 
      flash: {
        user: user,
        error_messages: user.errors.full_messages
      })

#参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?