在Rails迁移中使用向上/向下与更改/可逆方法有什么区别吗?

Ale*_*pov 0 migration ruby-on-rails

如果我这样做,在Rails迁移中,它有什么区别吗:

def up
  foo
end

def down
  bar
end
Run Code Online (Sandbox Code Playgroud)

或这个:

def change
  reversible do |direction|
    direction.up { foo }
    direction.down { bar }
  end
end
Run Code Online (Sandbox Code Playgroud)

我认为这是最好使用改变方法,如果迁移的一部分包括可逆的方法,如create_tableadd_column等。除此之外,有什么不同?

Fre*_*ung 6

如您所示,它没有优势。主要优点是很多时候根本不需要编写down方法/块,例如

class SomeMigration < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

reversible当迁移的一小部分活动记录不知道如何撤消时(例如原始SQL语句),通常使用该方法