0

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

# 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
4

2 回答 2

2

这就是 Rails 3.1 及更高版本的魔力。Rails 知道如何迁移您的数据库并在迁移回滚时对其进行反转,而无需编写单独的 down 方法。

Rails 跟踪迁移。因此,当您roll back. 之前我们曾经有两种方法updown. 在 Rails 3.1 及更高版本上,他们将迁移更改为拥有change方法。

add_coulmn反向方法的情况下remove_column与其他方法相同。使用跟踪的详细信息,它将调用适当的操作。所以你不需要两种方法(updown)。change您可以查看method: here支持的方法。如果您有其他方法,则需要使用upand down

如果您对 usingchange方法感到困惑,那么我建议您使用upand down。彻底完成迁移后,您可以开始使用change方法。

于 2013-03-09T10:19:59.753 回答
1

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

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

它完美地工作。:)

于 2013-03-09T10:21:08.477 回答