#PG::UndefinedTable: ERROR:の解決方法
後で外部キー追加やrollbackした時に発生しました。原因はmigrationファイルの実行順でした。
##前提
migration時に外部キー元のテーブルがないため、エラーになる時
エラーコード
pgの場合
PG::UndefinedTable: ERROR: relation モデル名 does not exist
SQLite3の場合
SQLite3::ConstraintException: foreign key constraint failed: DROP TABLE テーブル名
##解決方法
外部キーを参照される方のmigrationファイルを選んで先に実行する
以下にて、migration状況の確認
rake db:migrate:status
以下のようになっていたら、親の方を先に実行しなければならないので
Status Migration ID Migration Name
--------------------------------------------------
D, [2019-04-20T19:03:40.930016 #4] DEBUG -- : (7.5ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
down 2019aaaaaaaaaa Create 子(外部キー参照する方)
down 2019bbbbbbbbbb Create 親(外部キー参照される方)
親の方を選択して実行すればOK(その後rake db:migrateすれば子もmigrateされる)
rake db:migrate [VERSION=2019bbbbbbbbb]
##原因
・外部キーを設定しているモデルの場合、外部キー元のモデルのmigrationを先に実行する必要がある
・デフォルトでは古いmigrationファイルから実行するっぽいので、後で外部キー追加した後にまとめてrollbackしたりすると発生する