2015-08-30 156 views
-1

我意外地创建了一个我不需要的迁移,因此我删除了该文件,并在尝试运行rake db时创建了一个新的迁移:迁移我一直收到此错误。我是用宝石SQLITE3,和Ruby on Rails 4Rake db:迁移错误,表已存在

StandardError: An error has occurred, this and all later migrations canceled: SQLite3::SQLException: table "categories" already exists: CREATE TABLE "categories" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "category_name" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NO T NULL) D:/muse/db/migrate/20150830113519_create_categories.rb:3:in change' D:in迁移” 的ActiveRecord :: StatementInvalid:SQLite3的::的SQLException:表中 “类别” 已经存在:CREATE TABLE “类别”( “ID” INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,“category_name”varchar,“created_at”datetimeT NULL,“updated_at”datetime NOT NULL) D:/muse/db/migrate/20150830113519_create_categories.rb:3:表“类别”已存在 D:/muse/db/migrate/20150830113519_create_categories.rb:3:在change' D:in迁移' 任务:TOP => db:migrate (请参阅通过运行任务与--trace)

+0

尝试'rake db:reset' – nsave

回答

3

当你创建一个迁移并运行它,并希望使机会,则必须先回滚:

$斌/耙分贝:回滚STEP = 1

在这个阶段,你可以删除文件或修改,并再次运行migration_

$斌/耙分贝:迁移

现在你删除了文件,你不能回滚。你所要做的就是手动删除表或创建一个迁移命令来删除表:

$斌/导轨产生迁移DropCategoriesTable

这将生成一个迁移文件。编辑它:

class DropCategoriesTable < ActiveRecord::Migration 
    def up 
    drop_table :categories 
    end 

    def down 
    raise ActiveRecord::IrreversibleMigration 
    end 
end 
0

你想完全删除表吗?如果是这样,只需删除迁移文件即可将其删除,因为它已被迁移到数据库。如果您尝试更改或删除表格,则需要启动新的迁移并使用“ALTER TABLE”。我会建议检查这个计算器链接:How to delete or add column in SQLITE?

2

这是与我交流,因为我想在diferents分行做一些样品。所以我这样做和工作:

rake db:drop 
rake db:create 
rake db:migrate