如何修复未删除列的拙劣迁移?

时间:2013-05-20 14:46:25

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

我做了一次迁移,以便在一周前从我的第一个应用程序中删除一个列:

class RemoveHalfOrFullFromFurlough < ActiveRecord::Migration
  def up
    remove_column :furloughs, :half_or_full
  end

  def down
    add_column :furloughs, :half_or_full, :decimal
  end
end

我一定做错了,因为half_or_full仍在我的架构中。直到今天我才尝试添加Active Admin gem时才注意到。它错误,因为它试图从这个僵尸列中提取数据,并且不知道如何处理它。

之后我做了很多迁移,所以我不认为简单的回滚是一种选择。也许是吗?

这是创建列的原始迁移:

class AddHalfOrFullToFurloughs < ActiveRecord::Migration
  def change
    add_column :furloughs, :half_or_full, :decimal
  end
end

1 个答案:

答案 0 :(得分:0)

这是我的迁移理念:

当我处于开发阶段时,迁移的想法是我可以在up部分进行更改,并在down部分中对其进行反转。根据我的需要,我可以回到起点并向前滚动到中途或中途停止。我还在“开发”系统,我正在创建关于我的数据库在任何时间点需要的位置的规则。 (我控制水平。我控制垂直。)

在调试迁移时,我有时会回滚一两个级别,然后前滚以微调更改。有些人说我们应该只向前推进,所以它完全可以重现。当数据是一次性的时,我通常没有意识到用另一个迁移撤消一个愚蠢的步骤,所以我会备份,调整并再次运行它。您或其他人的里程可能会有所不同。

一旦我从开发阶段转向测试和生产,规则就会发生变化。我滚动到最后并留在那里因为我的数据库和代码应该非常稳定,我正在加载数据“for reals”。