Mysql2::Error: Table 'database.table_name' doesn't exist: SHOW FULL FIELDS FROM `table_name`

Rails 5.0から5.1へアップグレードしたアプリケーションのマイグレーションで上記のようなエラーが出た時の対応。

create tableのマイグレーションなのにテーブルがないというエラーでかなり戸惑うが、原因としてはRails 5.0から5.1へのアップデートでPrimary Keyカラムがintからbigintに変更されているので、5.0で作成したテーブルを参照する外部キーを含むマイグレーションを作成すると、もとのテーブルのIDがintであるのに対し、外部キーはbigintでミスマッチになるためエラーになるようだ。

たとえばuser_idを含むcommentsテーブルを作成するマイグレーション。
class CreateComments < ActiveRecord::Migration[5.1]
def change
create_table :comments do |t|
t.references :user, foreign_key: true
end
end
end

Mysql2::Error: Table 'db.comments' doesn't exist: SHOW FULL FIELDS FROM `comments`
.
.
Mysql2::Error: Cannot add foreign key constraint
.
.
abstract_mysql_adapter.rb:876:in `mismatched_foreign_key'

対策としてはマイグレーションのバージョンを5.0にする
class CreateComments < ActiveRecord::Migration[5.0]
def change
create_table :comments do |t|
t.references :user, foreign_key: true
end
end
end
タグ:Rails
posted by digital-squad at 2017年06月01日 20時00分 | Comment(0) | TrackBack(0) | Ruby on Rails / Ruby
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック