Rails 3.2:从另一个迁移中调用\ down

时间:2012-09-04 16:46:05

标签: ruby-on-rails ruby-on-rails-3 rails-migrations

我希望以类似于生成器的方式调用另一个迁移。 基本上,如果您有一个创建表,那么在将来的某个时间点您将不再使用该表,并且您希望迁移调用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

我不想要任何解决方法,而是明确地重复代码并保持清除迁移和角色的能力。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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