如何从db文件夹中删除已取消的迁移

时间:2014-11-11 10:02:20

标签: ruby-on-rails

我想从我的应用程序中删除迁移。

我有一个迁移文件20141105030942_removedate_fromexpense.rb

迁移的类文件是

class RemovedateFromexpense < ActiveRecord::Migration
  def change
   remove_column :expenses, :date, :date
  end
end

当我发出这个命令时:

rake db:migrate:down VERSION=20141105030942

我收到以下错误:

== 20141105030942 RemovedateFromexpense: reverting ============================
-- add_column(:expenses, :date, :date)
rake aborted!
StandardError: An error has occurred, this migration was canceled:

SQLite3::SQLException: duplicate column name: date: ALTER TABLE "expenses" ADD "date" date/home/sumyvps/.rvm/gems/ruby-1.9.3-p545@railstutorial_rails_4_0/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in `initialize'

db:migrate:status for migration file is as below
up     20141105030942  Removedate fromexpense

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:0)

常见任务是回滚上次迁移。例如,如果您在其中犯了错误并希望纠正它。您可以运行以下命令,而不是跟踪与之前迁移相关联的版本号:

rake db:rollback

这将通过还原更改方法或运行down方法来回滚最新的迁移。如果需要撤消多次迁移,可以提供STEP参数:

rake db:rollback STEP=3

将恢复最后3次迁移。

首次运行:

rails generate migration RemoveDateFromExpense date:date

然后rake db:migrate 希望这有帮助!

答案 1 :(得分:0)

您无需在迁移文件中指定列类型。只需表的名称和列足以从表中删除列。

将您的迁移文件编辑为:

class RemovedateFromexpense < ActiveRecord::Migration
  def change
   remove_column :expenses, :date
  end
end

然后运行:

rake db:migrate

这应该做的工作。