我希望以与生成器类似的方式调用另一个迁移。基本上,如果您有一个创建表,那么在将来的某个时间点,您将不再使用该表,并且您希望迁移调用与原始创建迁移完全相反的up
和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
我不想要任何变通方法,而是明确地重复代码,并保持干净迁移和角色返回的能力。
如有任何帮助,我们将不胜感激!
迁移只是一个Ruby文件,因此您可以require
it:
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