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

nia*_*ian 1 ruby ruby-on-rails rails-migrations

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

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

rails generate scaffold Micropost context:text user_id:integer
rails db:migrate
Run Code Online (Sandbox Code Playgroud)

尽管我在运行时遗漏了冒号,但犯了一个错误:

rails generate scaffold Micropost context:text user_id integer
rails db:migrate
Run Code Online (Sandbox Code Playgroud)

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

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

 SQLite3::SQLException: table "microposts" already exists:
Run Code Online (Sandbox Code Playgroud)

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

 Status   Migration ID    Migration Name  
 up       20161024021157  Create users  
 up       20161024025545  ********** NO FILE **********  
 down     20161024025805  Create microposts  
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*err 5

rails db:rollback将简单地回滚一个 迁移,我相信这就是您正在寻找的

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

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

rails db:migrate:down VERSION=1843652238
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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

    class DropMicroposts < ActiveRecord::Migration 
      def up 
        drop_table :microposts 
      end 
    end 
    
    Run Code Online (Sandbox Code Playgroud)
  4. 跑步rails db:migrate

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