マイグレーションできない時、外部キー周りを見直してみる。

スキルアップのため、Railsを使って個人アプリを作っています。

今回はグループ事にタスクの進捗を管理するアプリなので、

タスクとグループ、ユーザーとグループでそれぞれを組ませます。

 

DB設計も決まったし、さあ、rails db:migrateだ!!!  

と思ったら・・ターミナルにこんなエラーが。

 

f:id:atsukofu:20200506143444p:plain

ターミナルにでたエラー

 よくよくみると、

tasksテーブルの'group_id'の型はbignit型になるはずだ、という事。

あれ、外部キーって、integer型かと思ってた。

違いは下記の通り。

 

・integer

  →-2147483648から+2147483647までの整数。(格納サイズは4バイト)

 

・bignit

 →-9223372036854775808から9223372036854775807までの整数。

 (格納サイズは8バイト)

 

調べてみると、マイグレーションファイルのバージョン5.1以降では、

referenceで設定したカラムはinteger型にならず、bigniti型になるよ、という事。

つまり、元のgroupsテーブルのidはinteger型だが、

関連付けたtasksテーブルのgroup_idカラムをbignitにしちゃ型が合わないよ、

と言われてるようだ。

 

という事で下記の通りのマイグレーションファイルを作成。

f:id:atsukofu:20200506150210p:plain

7、8行目が今回修正を加えた部分です。

 

これでマイグレーションできました!