Rails 5.0.0.1中如何撤销rails db:migrate的操作

How to undo the action of rails db:migrate in Rails 5.0.0.1

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

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

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。错误是一样的。

rails db:rollback 只会回滚 one migration 我相信这就是你要找的

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

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

rails db:migrate:down VERSION=1843652238

编辑:

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

  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