在新的首选方式中,只有一种方法似乎添加了一列。这是否意味着您不需要有删除列的方法?
# 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
答案 0 :(得分:2)
这是Rails 3.1及更高版本的神奇之处。 Rails知道如何迁移数据库并在回滚迁移时将其反转,而无需编写单独的down方法。
Rails跟踪迁移。因此,当您roll back
时,它将实现反转迁移所添加的更改。之前我们使用了两种方法up
和down
。在Rails 3.1及更高版本中,他们将迁移更改为change
方法。
如果add_coulmn
反向方法为remove_column
,则其他方法相同。使用跟踪细节,它将调用适当的操作。因此,您不需要两种方法(up
和down
)。您可以看到change
方法支持的方法:here。如果您还有其他方法,则需要使用up
和down
。
如果您对使用change
方法感到困惑,建议您使用up
和down
。完成迁移后,您可以开始使用change
方法。
答案 1 :(得分:1)
你是对的,你不需要一个单独的方法来删除列。
如果您没有丢失任何数据,您甚至可以尝试'rake db:rollback'然后再次'rake db:migrate'。
完美无缺。 :)