更改是否处理模式的迁移/回滚

时间:2013-03-09 10:14:40

标签: ruby-on-rails rails-migrations

在新的首选方式中,只有一种方法似乎添加了一列。这是否意味着您不需要有删除列的方法?

# the old way
class AddNameToPerson < ActiveRecord::Migration
  def up
    add_column :persons, :name, :string
  end

  def down
    remove_column :person, :name
  end
end

# the new prefered way
class AddNameToPerson < ActiveRecord::Migration
  def change
    add_column :persons, :name, :string
  end
end

2 个答案:

答案 0 :(得分:2)

这是Rails 3.1及更高版本的神奇之处。 Rails知道如何迁移数据库并在回滚迁移时将其反转,而无需编写单独的down方法。

Rails跟踪迁移。因此,当您roll back时,它将实现反转迁移所添加的更改。之前我们使用了两种方法updown。在Rails 3.1及更高版本中,他们将迁移更改为change方法。

如果add_coulmn反向方法为remove_column,则其他方法相同。使用跟踪细节,它将调用适当的操作。因此,您不需要两种方法(updown)。您可以看到change方法支持的方法:here。如果您还有其他方法,则需要使用updown

如果您对使用change方法感到困惑,建议您使用updown。完成迁移后,您可以开始使用change方法。

答案 1 :(得分:1)

你是对的,你不需要一个单独的方法来删除列。

如果您没有丢失任何数据,您甚至可以尝试'rake db:rollback'然后再次'rake db:migrate'。

完美无缺。 :)