エラーの内容と原因
エラーの内容としては、外部キーを含む物は追加できませんという意味です。何故このようなエラーが出たのでしょうか?
原因は色々ありますが、一つはmigrateするファイルの順番に原因があります。例えば
class CreateItems < ActiveRecord::Migration[5.0]
def change
create_table :items do |t|
t.references :category, foreign_key: true
t.timestamps
end
end
end
このようにして、productテーブルを参照するための外部キー(product_id)を含めて、テーブルを作ろうと思った場合、このファイルが実行する前にproductテーブルが作成されていないといけません。productテーブルが作成されていない状態でマイグレートをすると、Cannot add foreign key constraintとエラーになってしまいます。
解決方法
1.マイグレーションファイルの順番を変える
マイグレーションファイルは上にあるものから実行されるので、productテーブルを作成するマイグレーションファイルの後にこのファイルが実行されるようにすればいいです。簡単な方法は、ファイルの数字の部分を弄ることです。マイグレーションファイルの名前の最初は作成した時刻がつけられているので、そこの数字をいじれば大丈夫です。
2.最後に外部キーを付け加えるマイグレーションファイルを作成する
1の方法でもいいのですが、テーブルが増えてきたりすると大変なので、新たに外部キーを追加するためのマイグレーションファイルを作ってしまった方が楽な時もあります。
class AddForeignKeyToItem < ActiveRecord::Migration[5.2]
def change
add_reference :items, :category, foreign_key: true, null: false
end
ファイルの数字の部分はこのファイルが最後に実行されるように正しいものに変えてください。