我的情况如下:我正在使用我的rails应用程序并决定创建一个模型,因此我使用了命令rails generate model Micropost content:string user_id:integer
。之后,创建了迁移文件db/migrate/[timestamp]_create_microposts.rb
,并开始使用它添加一些列和索引。最后,我使用rake db:migrate
进行了迁移。
当我决定我需要返回并删除模型Micropost时出现问题,所以我错误地直接使用rails destroy model Micropost
删除模型然后我意识到我需要进行回滚到数据库。但它不再起作用了,因为我在使用rails destroy时删除了迁移文件。
是否有任何“好”或“正确”的方式回到初始数据库版本,我创建模型Micropost之前的版本?
我的rake db:migrate:state
如下:
Status Migration ID Migration Name
--------------------------------------------------
up 20140101222024 Create users
up 20140102220824 Add index to users email
up 20140102222352 Add password digest to users
up 20140105055539 Add remember token to users
up 20140108013447 Add admin to users
up 20140109211729 ********** NO FILE **********
顺便说一下 ,创建一个具有相同名称id的“虚拟”迁移文件(如我发现here)的解决方案不是解决方案,它只会跳过回滚(表格Microposts仍然存在)。另外,我发现this question很有用,但问题并不一样,因为我在回滚之前销毁了模型(或者迁移到以前的版本)。
有没有办法执行此回滚?或者只是不可能因为迁移文件被删除了?
答案 0 :(得分:0)
看起来您只需登录到数据库服务器并执行drop table users;
(看起来您正在本地执行所有操作,对吧?)。你应该真的使用版本控制 - 你首先不会遇到这样的问题。
答案 1 :(得分:0)
您有两种选择。您可以通过登录数据库服务器并使用drop table microposts
来删除表,也可以运行rails g migration drop_microposts
来生成迁移,然后可以运行该迁移来删除表。运行迁移后,您可以删除迁移。