新手问题 Rails 如何删除一个已有的数据库表?

1272729223 · 2012年07月25日 · 最后由 zhangmingse 回复于 2015年12月16日 · 14323 次阅读

我之前创建了一个 work 的脚手架自动创建的数据库 works 表。 现在我已经 destroy 掉了那个 Work 脚手架,然后重新建了一个同名但是字段名不同的 works 表,迁移的时候说:

➜  rake db:migrate
==  CreateWorks: migrating ====================================================
-- create_table(:works)
rake aborted!
An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "works" already exists: CREATE TABLE "works" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "description" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) 

我如何删除之前的 works 表?

开发阶段的话可以

rake db:migrate:reset

rake db:schema:load

我运行这条命令,所有数据库内容都被清空了,啊!!(如果你刚好 google 进来看到这个,请谨慎!)

#1 楼 @Rei 恩 我先记下,下回试试

#3 楼 @1272729223 1 楼也是清数据库

刚建的表要取消就用

rake db:rollback   # 根据migration文件回滚

如果已经建了 N 多其它表就在新的 create_table 前面加:

drop_table :table_name   #创建前删除表
```

还有种做法是加个 force:

create_table :xxx, :force =>true

#6 楼 @azhao #7 楼 @quakewang

谢谢,这些方法看起来是我想要的。

#6 楼 @azhao 这个方法好像不错哦。 我是 rails g migration DropTablename 然后在里面敲入:

def up
  drop_table :tablename
end

#9 楼 @JeskTop 很实用 谢谢!

到新公司的第一天 老大就对我说“别对数据库执行 rake db:schema:load”这局代码

直接 rake db:migrate:down VERSION=“版本号” 然后重新 rake db:migrate VERSION="版本号" 这样该表就被清空了。我一直都是这样做的,不知道是不是满足你的需求。@Rei

#6 楼 @azhao 这个方法很好。我就是用这个方法解决的问题。这里我补充一下,就是在路径 db/migrate 下对应的 rb 文件的

def change
  create_table :users do |t|

中间加那一句 drop,成如下样子

def change
  drop_table :users
  create_table :users do |t|
需要 登录 后方可回复, 如果你还没有账号请 注册新账号