【问题标题】:Rails 3.2: Invoking up\down from another migrationRails 3.2:从另一个迁移中调用 up\down
【发布时间】:2012-08-29 09:00:51
【问题描述】:

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

我不想要任何解决方法,而是明确地复制代码并保持干净迁移和角色回退的能力。

任何帮助将不胜感激!

【问题讨论】:

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


    【解决方案1】:

    迁移只是一个 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多