2012-09-04 8 views
5

私は、ジェネレータと同様の方法で別のマイグレーションを呼び出すことを検討しています。 作成テーブルがある場合、将来、テーブルを使用しなくなり、元の作成移行のものとまったく逆のupおよびdownを呼び出すようにしたいとします。 それは、私はRails 3.2:別のマイグレーションから downを呼び出す

rails g reverse_migration CreateModel 

のような発電機のものを作成したいことも可能ですし、その結果が

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

のようなものであるならば、私は道のいずれかの回避策の種類をしたいと、むしろ明示的にコードを複製していないとクリーンな移行とロールバックが可能です。

ご協力いただければ幸いです!あなたがそれをrequireできるよう

答えて

12

移行は、単にRubyのファイルです:

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

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

    def down 
    CreateModel.new.up 
    end 
end 

元の移行がchangeを使用している場合、あなたはCreateModel.new.migrate(:down)CreateModel.new.migrate(:up)を使用する必要があります。

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

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

の代わりに::

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

この回答はhttps://stackoverflow.com/a/754316/183791

に基づいて移行する際に、私の場合、

migrate(direction)を使用して複数の出力を生成し、

関連する問題