はじめに
この記事は2021年9月にまとめていた「細かいつまずいたことをメモしておく(9月編)をそれぞれ投稿した内容になります
解決方法が最新でない可能性もありますのでご了承ください
問題
Migrateをする際にテーブルが外部のテーブルに依存する(外部キーなど)ときに、うまくmigrateやrollbackができないことがあります。一部レコードが外部キーを持っている状態のままレコードに入っていたりするので起きていることがあります
対処方法
まずは参照元、参照先のテーブルを削除していきます
$ rails c
$ Model1.destroy_all
$ Model2.destroy_all
ここではmigrateしたいテーブルにModel1とModel2が紐づいていると仮定しています
またmigrateは途中まで成功しているとロールバックしないので(migrateファイル単位で判断するので失敗したときにはそのファイルの内容のみをロールバックしているので成功したファイルはロールバックされない)、duplicated
というエラーが出た場合はdown
を利用して削除していきます(upはすべてコメントアウトさせて辻褄を合わせます)
またMySQLに直でログインしてDBをデバックして原因となっている箇所を特定するのもよくやります
$ mysql -u root -p
$ use Database名
$ desc テーブル名 # テーブル構造を表示
$ show index from テーブル名 # インデックスが張られているか表示