[Rails]エラーStandardError: An error has occurred, all later migrations canceled: Column `外部キー名` on table `テーブル名` does not match column `id` on `テーブル名`の対処方法
エラー内容
$ rails db:migrate
上記コマンドを実行すると発生するエラー。ターミナルでのエラー表記は以下の通り。
Column `user_id` on table `items` does not match column `id` on `users`, which has type `bigint(20)`. To resolve this issue, change the type of the `user_id` column on `items` to be :bigint. (For example `t.bigint :user_id`).
エラー文の一部を翻訳してみると...。
テーブル `items` のカラム `user_id` が `users` のカラム `id` と一致しません。この問題を解決するには、`items` の `user_id` カラムの型を :bigint に変更します。(例えば `t.bigint :user_id`)。
今回はitemsテーブルが外部キーとして指定しているカラムが参照元と一致しませんよ!というエラーですね。
対処法(仮説)
結論、Railsでは外部キーを使用する際はreferences型
を推奨しているので、bigint型
を使用する必要はありません。
このエラーのポイントは参照できませんということなので、マイグレーションファイルの作成順に問題があると仮説できます。
マイグレーションファイルの作成順とは?
外部キーを使用するテーブル(references型を記述するテーブル)と参照されるテーブルには作成順によって参照できなくなる場合があり、今回のエラーは作成順序の誤りで発生しました。
作成順は、①参照される側のテーブル→②外部キーを使用するテーブル(references型を記述するテーブル)です。
対処法はマイグレーションファイルの作成日時を修正してあげれば解決できます。
対処法(仮設検証)
添付画像の数字部分を、参照される側のテーブルよりも外部キーを使用するテーブルの数字を大きくすれば解決します。
エラー分からは少し推測しづらいエラーですね。
今回の場合だと、create_items
が20200909000000
なら20200909100000
でいいです。
ちなみに、最初の4桁は西暦、次の4桁は月日です。
最後に
今回のエラーはテーブル数が増えると発生しやすいエラーなのかなと思います。
ただ、対象法を知っていれば問題なく解決できると思いますので、参考にしてみてください!
Author And Source
この問題について([Rails]エラーStandardError: An error has occurred, all later migrations canceled: Column `外部キー名` on table `テーブル名` does not match column `id` on `テーブル名`の対処方法), 我々は、より多くの情報をここで見つけました https://qiita.com/nkekisasa222/items/84c257fc1a8ae964ddb9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .