2012-09-04 12 views
5

Ich möchte eine andere Migration auf eine ähnliche Weise wie Generatoren aufrufen. Wenn Sie eine create-Tabelle haben, verwenden Sie die Tabelle zu einem späteren Zeitpunkt nicht mehr und möchten, dass eine Migration up und down genau entgegengesetzt zu denen der ursprünglichen create-Migration aufruft. Wenn es möglich ist, dann würde ich einen Generator so etwas wieSchienen 3.2: Aufruf von einer anderen Migration

rails g reverse_migration CreateModel 

erstellen und dann ist das Ergebnis etwas wie

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

Ich will keine Abhilfe Art und Weise und nicht explizit duplizieren Code und Bewahre die Fähigkeit für eine saubere Migration und einen Rollback.

Jede Hilfe würde sehr geschätzt werden!

Antwort

12

Eine Migration ist nur ein Ruby-Datei, so dass Sie es require können:

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

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

    def down 
    CreateModel.new.up 
    end 
end 

Wenn Ihre ursprüngliche Migration change verwendet, müssen Sie CreateModel.new.migrate(:down) und CreateModel.new.migrate(:up) verwenden.

In meinem Fall, wenn migrate(direction) mit mehr Leistung erzeugt bei der Migration:

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

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

statt:

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

Diese Antwort basiert auf https://stackoverflow.com/a/754316/183791

Verwandte Themen