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

时间:2016-10-24 03:40:54

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

迁移数据库时,我拼错了。

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

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

1 个答案:

答案 0 :(得分:2)

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