2017-08-26 5 views
0

私はコントローラを持っていたので、コマンドラインからrails destroy controller経由で削除しました。私はすべてを作り直してしまったが、毎回実行した。rails db:migrate次のエラーが出る。私は最後の2日間と毎回のために、この1つの小さな間違いを扱ってきた、何をすべきかという点で途方に暮れてよrails db:migrate not working

SQLite3::SQLException: table "advertisements" already exists: CREATE TABLE "advertisements" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "copy" text, "price" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) 

私はうん、右のトラック1に取得するように見えます。なぜ誰がこのエラーが起こっているのか、私ができることを教えてもらえれば、とても感謝しています。事前に感謝します

+0

「xxxxx_create_advertisements.rb」のような名前で/フォルダを移行/ DBに移行を見つけることができますが、あなたの移行は前にいくつかのエラーで失敗しましたか?これは部分的なデータベースのためかもしれません:マイグレーション - エラーのために、それはテーブルを作成し終わりました。そしてあなたがいったんマイグレーションファイルを修正したら、それは再びそれを実行することができません。 – kiddorails

+0

あなたのローカル環境では、手動でテーブルを削除し、移行を実行してみてください。 –

答えて

1

あなたの 'destroy_controller'コマンドがどうにかして '広告'という表を削除しなかったためです。 2つのソリューションがあります:

  1. テーブルが変更されていない場合は、テーブルを再作成する必要はありません。テーブル広告テーブルを作成している移行をコメントアウトするだけです。

  2. テーブルを再作成する場合は、テーブルを作成する前に移行にdrop_table :advertisementsを追加すると、既存のテーブルが削除され、移行が続行されます。

万が一

1

広告テーブルを削除する移行を追加する必要があります。

+0

これはコメントよりも解答に優れています。 –

2

db/migrateディレクトリを見てください。 xxxxx_create_advertisements.rb個のファイルが2つあります(xxxxxxは多数の番号ですが、正確にはこの移行の作成時のタイムスタンプです)。

もしそうなら、それらのうちの1つを削除します(両方とも同じ列定義を持つ場合は、外部キーの依存関係がない限りどちらを削除してもかまいません)。

次にもう一度お試しください。