2012-09-04 22 views
5

Estoy buscando invocar otra migración de forma similar a la de los generadores. Básicamente si tiene una tabla de creación, en algún momento en el futuro ya no estará utilizando la tabla y desea una migración para llamar al up y down exactamente opuesto a los de la migración de creación original. Si es posible, entonces, que crearía un generador algo así comoRails 3.2: Invocando down de otra migración

rails g reverse_migration CreateModel 

y entonces el resultado es algo así como

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

no quiero ningún tipo de solución camino y en lugar duplico explícitamente código y mantener la capacidad de una migración limpia y roleback.

¡Cualquier ayuda sería muy apreciada!

Respuesta

12

Una migración es sólo un archivo de Ruby, por lo que puede que 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 

Si la migración original utiliza change, debe utilizar CreateModel.new.migrate(:down) y CreateModel.new.migrate(:up).

En mi caso, cuando se utiliza migrate(direction) genera una mayor producción al migrar:

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

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

en lugar de:

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

Esta respuesta se basa en https://stackoverflow.com/a/754316/183791

Cuestiones relacionadas