2013-07-06 11 views
6

Jaka jest różnica między def up; end i def change; end? Mam kodRóżnice między defem i def zmian w pliku migracji

class CreateTweets < ActiveRecord::Migration 
    def change 
    create_table :tweets do |t| 
     t.string :status 
     t.integer :zombie_id 

     t.timestamps 
    end 
    end 
end 

co to zmienić, jeśli mogę zdefiniować def up zamiast def change?

Odpowiedz

11

Metoda powinna być opatrzona metodą up, której można użyć do cofnięcia zmian migracji. Na przykład, jeśli napisał przykład w swoim pytaniu użyciu górę iw dół musisz następujący kod:

class CreateTweets < ActiveRecord::Migration 
    def up 
    create_table :tweets do |t| 
     t.string :status 
     t.integer :zombie_id 

     t.timestamps 
    end 
    end 

    def down 
    drop_table :tweets 
    end 
end 

Sposób change, z drugiej strony, może być odwrócone automatycznie przez Rails, więc nie ma potrzeby ręcznego utwórz metodę down.

change było wprowadzić do zastąpienia up i down ponieważ większość down metody można łatwo przewidzieć na podstawie metody up (w powyższym przykładzie drop_table jest wyraźnie przeciwieństwem create_table).

W sytuacjach, gdzie odwrotna operacja nie może być automatycznie pochodzące, można użyć metod up i down, lub wywołać metodę reversible od wybranej metody change.

Aby uzyskać więcej informacji, zobacz numer sections 3.6 - 3.7 of the Rails migration guide.

Powiązane problemy