我发现自己必须在 Rails 应用程序的几个表上执行非常相似的 sql 语句(除了表名之外可能还有 1 个参数)。结果,我得到了很多类似的迁移,比如这个:
class DoSomeSQLOnUser < ActiveRecord::Migration
def up
execute('some long sql that alters the user.field1')
execute('some long sql that alters the user.field2')
end
def down
execute('some sql that undoes the changes')
end
end
然后我对客户、销售等也有同样的看法。
我想扩展ActiveRecord::Migration
以便我可以这样做:
class DoSomeSQLOnUser < ActiveRecord::Migration
def change
do_custom_thing_on :users, :field1
do_custom_thing_on :users, :field2
end
end
我怎样才能做到这一点?我想我知道当操作分为上下时该怎么做,像这样:
class DoSomeSQLOnUser < ActiveRecord::Migration
def up
do_custom_thing_on :users, :field1
do_custom_thing_on :users, :field2
end
def down
undo_custom_thing_on :users, :field1
undo_custom_thing_on :users, :field2
end
end
但是这样做是为了让变化是“可逆的”,这让我无法理解。