環境
- Ruby3系
- Rails7系
- MySQL
(SQLiteからMySQLにDBを変更しようとした際にエラーが発生した)
エラー内容
terminal
rails db:reset
と実行したら↓
ActiveRecord::MismatchedForeignKey:
↑エラーが発生した
解決法
terminal
rails db:migrate:reset
を実行すれば、ActiveRecord::MismatchedForeignKeyが出ずに正常に動作します✅
原因
rails db:reset
は、
- 全テーブルdrop
- schema.rbを元にDBを作成
します。
なので、reference先が作られていないのに、任意のテーブルのreferenceカラムが先に作成されて、今回のエラーが発生します!
そして、、、
rails db:migrate:reset
は、
- 全テーブルをdrop
- migrationファイルを元にDBを作成
なので、reference先のテーブルが先に作成されている限り、エラーは発生しません!
※ referenceカラムが先に作成されるmigrationファイルの順番の場合は、reference先のテーブルを先に読み込むことでエラーが発生しなくなります。
参考にさせていただいた記事
- Active Record マイグレーション 4.3 データベースをリセットする - Railsガイド
- rails db:resetとrails db:migrate:resetの違い | junblog
最後に
エラー解決記事が少なかったので執筆しました。
本記事が多くの悩める方に届くこと願っています🌱