2012-09-04 17 views
5

Szukam inwokacji innej migracji w sposób podobny do generatorów. Zasadniczo, jeśli masz tabelę tworzenia, to w pewnym momencie w przyszłości nie będziesz już używać tej tabeli i chcesz, aby migracja zadzwoniła pod numer up i down dokładnie odwrotnie niż w przypadku migracji oryginalnej tworzenia. Jeśli to możliwe, to chciałbym stworzyć coś takiego generatoraRailsy 3.2: Wywoływanie w górę w dół z innej migracji

rails g reverse_migration CreateModel 

a następnie wynik jest coś

class ReverseCreateModel < ActiveRecord::Migration 
    def up 
    #call to create model down 
    end 
    def down 
    #call to create model up 
    end 
end 

Nie chcę żadnego rodzaju obejście w sposób wyraźny i raczej powielać kod i zachowaj możliwość czystej migracji i roli.

Każda pomoc będzie bardzo ceniona!

Odpowiedz

12

Migracja jest tylko plik Ruby, więc można go require:

require "./db/migrate/20120117195557_create_model.rb" 

class ReverseCreateModel < ActiveRecord::Migration 
    def up 
    CreateModel.new.down 
    end 

    def down 
    CreateModel.new.up 
    end 
end 

Jeśli oryginalny migracji używa change, należy użyć CreateModel.new.migrate(:down) i CreateModel.new.migrate(:up).

W moim przypadku, przy użyciu migrate(direction) generuje większą moc podczas migracji:

== ReverseCreateModel: migrating ====================================== 
== CreateModel: reverting ============================================= 
(...) 
== CreateModel: reverted (0.0018s) ==================================== 

== ReverseCreateModel: migrated (0.0019s) ============================= 

zamiast:

== ReverseCreateModel: migrating ====================================== 
(...) 
== ReverseCreateModel: migrated (0.0019s) ============================= 

Ta odpowiedź jest oparta na https://stackoverflow.com/a/754316/183791

Powiązane problemy