Ruby on rails rails数据库:迁移不工作

Ruby on rails rails数据库:迁移不工作,ruby-on-rails,ruby,controller,ruby-on-rails-5.1,Ruby On Rails,Ruby,Controller,Ruby On Rails 5.1,我有一个错误命名的控制器,最后通过rails destroy controller将其从命令行中删除。我最终重新创建了所有内容,但每次运行railsdb:migrate时都会出现以下错误 SQLite3::SQLException: table "advertisements" already exists: CREATE TABLE "advertisements" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varcha

我有一个错误命名的控制器,最后通过
rails destroy controller
将其从命令行中删除。我最终重新创建了所有内容,但每次运行
railsdb:migrate
时都会出现以下错误

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)

我不知所措,在过去的两天里我一直在处理这个小小的错误,每次我似乎都在正确的轨道上,是的。如果有人能告诉我为什么会发生这种错误,以及我能做些什么,我将不胜感激。提前感谢

您应该添加一个删除广告表的迁移。

查看
db/migrate
目录。您是否有两个
xxxxx\u create\u advisions.rb
文件(其中
xxxxxx
是一组数字,更准确地说是创建此迁移的时间戳)

如果是这样,则删除其中一个(如果两个都有相同的列定义,则不管是哪一个,除非您有外键依赖项)


然后重试。

问题是因为您的“销毁控制器”命令没有删除表“广告”。有两种解决方案:

  • 如果表中没有任何更改,则无需重新创建表。只需注释掉在其中创建表广告表的迁移

  • 如果确实要重新创建表,请在创建表之前在迁移中添加
    drop\u table:advisions
    ,这将删除现有表,然后继续迁移


  • 您可以在db/migrate/文件夹中找到名为“xxxxx\u create\u advisions.rb”的迁移。

    您的迁移以前是否因错误而失败?这可能是因为部分db:migration-由于错误,它最终创建了表。。一旦您修复了迁移文件,它将无法再次执行。这是您的本地环境,所以只需手动删除该表并尝试运行迁移。