【问题标题】:Rails: How to go back to initial db version after creating model, migrating and then destroying model?Rails:创建模型,迁移然后销毁模型后如何回到初始数据库版本?
【发布时间】:2014-01-10 00:43:19
【问题描述】:

我的情况如下:我正在开发我的 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 很有用,但不是同一个问题,因为我在回滚(或迁移到以前的版本)之前破坏了模型。

底线:

有没有办法执行这个回滚?还是因为迁移文件被删除而无法实现?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    你有两个选择。您可以通过登录到您的数据库服务器并使用drop table microposts 来删除该表,或者您可以运行rails g migration drop_microposts 来生成一个迁移,然后您可以运行该迁移来删除该表。运行迁移后,您可以删除迁移。

    【讨论】:

    • 所以唯一的解决方案是直接在数据库中手动撤消迁移?有没有办法回滚?
    • 如果您的迁移丢失,则不会...您可以按照我的建议创建迁移以删除表,或者进入数据库并手动删除它。
    【解决方案2】:

    看起来您可以登录到您的数据库服务器并执行drop table users;(看来您是在本地执行所有这些操作,对吧?)。你真的应该使用版本控制——你一开始就不会有这样的问题。

    【讨论】:

    • 我用的是git,但是创建模型后没有提交,所以没有保存迁移文件。还有其他方法可以恢复文件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2015-10-12
    • 2011-09-14
    • 2021-02-07
    • 2015-02-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多