【问题标题】:How to undo the action of rails db:migrate in Rails 5.0.0.1如何在 Rails 5.0.0.1 中撤消 rails db:migrate 的操作
【发布时间】:2017-03-05 18:07:44
【问题描述】:

在迁移数据库时,我犯了拼写错误。

我想通过运行生成一个脚手架:

rails generate scaffold Micropost context:text user_id:integer
rails db:migrate

虽然我在运行时遗漏了冒号是一个错误:

rails generate scaffold Micropost context:text user_id integer
rails db:migrate

我想撤消此迁移,该怎么做? (我正在使用 Rails 5.0.0.1

当我运行rails db:migrate 时,我收到以下错误:

 SQLite3::SQLException: table "microposts" already exists:

当我运行rails db:migrate:status 时,我得到以下输出:

 Status   Migration ID    Migration Name  
 up       20161024021157  Create users  
 up       20161024025545  ********** NO FILE **********  
 down     20161024025805  Create microposts  

我尝试使用rails db:migrate:down VERSION=20161024025805。命令行中没有显示任何消息。然后我跑了rails db:migrate。错误是一样的。

【问题讨论】:

标签: ruby-on-rails ruby rails-migrations


【解决方案1】:

rails db:rollback 将简单地回滚 一个 migration 我相信这就是你要找的

对于更具体的回滚,您可以运行rails db:migrate:down VERSION=numberofversion

numberofversion替换为生成的迁移文件的版本号,例如:

rails db:migrate:down VERSION=1843652238

编辑:

由于您收到Microposts 表已存在的错误,您必须按照以下步骤删除该表:

  1. 运行rails generate migration DropMicroposts
  2. 转到/db/migrate folder 并找到您刚刚创建的最新迁移文件
  3. 在该文件中粘贴:

    class DropMicroposts < ActiveRecord::Migration 
      def up 
        drop_table :microposts 
      end 
    end 
    
  4. 运行rails db:migrate

  5. 之后,运行rails generate scaffold Micropost context:text user_id:integer
  6. 然后运行rails db:migrate

【讨论】:

  • 运行rails db:migrate:down VERSION=1843652238的消息告诉我使用db:rollback。但是运行 db:rollback 什么也没显示。还是不行。
  • 您是否真的将版本号替换为您创建的迁移的版本号?
  • 迁移ID是版本号吗?
  • 在 db/migrate 文件夹中,您有类似 241294283_add_something_to_something 的文件。版本号是要回滚的文件前面的编号
  • rails db:migrate:down VERSION=20161024025805之后还是说ActiveRecord::StatementInvalid: SQLite3::SQLException: table "microposts" already exists
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 2016-11-19
  • 1970-01-01
  • 2017-04-27
  • 2017-01-02
相关资源
最近更新 更多