エラー内容
$ 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桁は月日です。
最後に
今回のエラーはテーブル数が増えると発生しやすいエラーなのかなと思います。
ただ、対象法を知っていれば問題なく解決できると思いますので、参考にしてみてください!