2013-03-09 67 views
0

在新的首選方式中,只有1個似乎添加列的方法。這是否意味着你不需要有一種方法來刪除列?是否改變句柄遷移/回滾模式

# 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

這就是Rails 3.1及更高版本的魔力。 Rails知道如何遷移數據庫並在遷移回滾時將其反轉,而無需編寫單獨的停用方法。

Rails跟蹤遷移。因此,當您執行roll back時,它將執行用於反轉遷移所添加的更改。此前我們使用兩種方法updown。在Rails 3.1及更高版本中,他們將遷移改爲擁有change方法。

add_coulmn的情況下,反向方法是remove_column,對於其他方法也是如此。使用追蹤的細節,它會調用適當的操作。所以你不需要兩種方法(updown)。您可以看到change方法支持的方法:here。如果你有其他的方法,那麼你需要使用updown

如果您對使用change方法感到困惑,那麼我建議您使用updown。一旦徹底遷移,您可以開始使用change方法。

1

你是對的,你不需要一個單獨的方法來刪除列。

如果您沒有任何數據丟失,您甚至可以嘗試'rake db:rollback',然後再'rake db:migrate'。

它完美的作品。 :)