#はじめに
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.rb
のhalt_callback_chains_on_return_falseメソッドが原因だと読み取れる。
調べたら、Rails5.2よりhalt_callback_chains_on_return_falseが削除されたそうなので、コメントアウトすれば問題を解決できる。
# 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
})
#参考