6

ジェネレーターと同様の方法で別の移行を呼び出すことを検討しています。基本的に、作成テーブルがある場合、将来のある時点でテーブルを使用しなくなり、移行を呼び出して、元の作成移行updownは正反対にする必要があります。可能であれば、次のようなジェネレーターを作成します

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

回避策は必要ありません。コードを明示的に複製し、クリーンな移行とロールバックの機能を維持します。

どんな助けでも大歓迎です!

4

1 に答える 1

12

移行は単なるRubyファイルであるため、次のことができ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

元の移行でを使用する場合はchange、とを使用する必要がありCreateModel.new.migrate(:down)ますCreateModel.new.migrate(:up)

私の場合、使用migrate(direction)すると、移行時にさらに多くの出力が生成されます。

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

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

それ以外の:

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

この回答はhttps://stackoverflow.com/a/754316/183791に基づいています

于 2013-03-22T20:54:49.747 に答える