我有一个错误命名的控制器,最后通过rails destroy controller
从命令行删除它。我最终重新创建了所有内容,但每次运行rails db: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)
我在做什么方面感到很茫然,过去两天我一直在处理这个小小的错误,每次我似乎都走上了正确的轨道,是的。如果有人能告诉我为什么会发生这种错误以及我能做些什么我会非常感激。提前致谢
答案 0 :(得分:1)
查看db/migrate
目录。您是否有两个xxxxx_create_advertisements.rb
文件(其中xxxxxx
是一堆数字,更确切地说是创建此迁移的时间戳)?
如果是这样,那么删除其中一个(如果它们具有相同的列定义,那么哪个没关系 - 除非你有外键依赖性)。
然后再试一次。
答案 1 :(得分:0)
您应该添加一个删除广告表的迁移。
答案 2 :(得分:0)
问题是因为你的' destroy_controller'命令以某种方式没有删除表'广告'。有两种解决方案:
如果表中没有任何更改,则无需重新创建表格。只需注释掉您正在创建表格广告表的迁移。
如果您确实要重新创建表格,请在创建表格之前在迁移中添加drop_table :advertisements
,这将删除现有表格,然后继续迁移。
您可以在db / migrate /文件夹中找到名称类似于' xxxxx_create_advertisements.rb'
的迁移