カラム追加時のエラー
私が作成しているアプリケーション「Yamashiru」を受けて気になった点や復習した方が今後の役に立つと思って作成しています。
さらにエンジニア初心者の方に向けて タメになる情報をお届けします。
今回は、、、
カラムの追加の際のエラー対処
どうしてもアプリケーションを作っていく中で「こんな機能も入れたいな。」と思ってテーブルを修正される方も多いかと思います!その時に私が遭遇したエラーをご紹介します。
エラー内容
カラムを追加した後にrails db:migrateを実施したところ以下のエラーが発生しました。
-- create_table(:tweets) rails aborted! StandardError: An error has occurred, all later migrations canceled: Column `user_id` on table `tweets` 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 `tweets` to be :bigint. (For example `t.bigint :user_id`). Original message: Mysql2::Error: Cannot add foreign key constraint <中略>
エラーとの向き合い方
ポイントはどんな文章が記載されているかを冷静に見極めることです。
気になる文章を翻訳してみます
Column `user_id` on table `tweets` 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 `tweets` to be :bigint. (For example `t.bigint :user_id`).
テーブル `tweets` のカラム `user_id` が `users` のカラム `id` と一致しません。この問題を解決するには、`tweets` の `user_id` カラムの型を :bigint に変更します。(例えば `t.bigint :user_id`)。
エラー対処
結論、Railsでは外部キーを使用する際はreferences型を推奨しているので、bigint型を使用する必要はありません。
このエラーのポイントは参照できませんということなので、マイグレーションファイルの作成順に問題があると仮説できます。
添付画像のように数字部分を、参照される側(今回の場合categories)のテーブルよりも外部キーを使用するテーブル(今回の場合tweets)の数字を大きくすれば解決します。 こちらは手入力で変更が可能です。
20210711053719_create_tweets.rb #20210711(2021/7/11)を20210728(2021/7/28)に変更
その後に通常通りrails db:createを実施したところテーブルの修正が出来ました。
いかがでしたでしょうか? 1個ずつ落ち着いて実施出来れば簡単な操作になりますので是非ご活用下さい!