0

新しい好ましい方法では、列を追加するように見えるメソッドは 1 つだけです。列を削除する方法が必要ないということですか?

# the old way
class AddNameToPerson < ActiveRecord::Migration
  def up
    add_column :persons, :name, :string
  end

  def down
    remove_column :person, :name
  end
end

# the new prefered way
class AddNameToPerson < ActiveRecord::Migration
  def change
    add_column :persons, :name, :string
  end
end
4

2 に答える 2

2

これが Rails 3.1 以降の魔法です。Rails は、別の down メソッドを記述する必要なく、データベースを移行し、移行がロールバックされたときに元に戻す方法を知っています。

Rails は移行を追跡します。そのため、移行によって追加された変更を元に戻すための実装が必要になりますroll back。以前は と の 2 つのメソッドを使用していupましdownた。Rails 3.1 以降では、マイグレーションを havechangeメソッドに変更しました。

add_coulmn逆の場合はremove_column他の方法も同様です。追跡された詳細を使用して、適切なアクションを呼び出します。upしたがって、2 つのメソッド (と)は必要ありませんdownchangemethod: here でサポートされているメソッドを確認できます。これら以外の方法がある場合は、 and を使用する必要がありupますdown

メソッドの使用に混乱している場合は、 andchangeを使用することをお勧めします。移行を完了したら、メソッドの使用を開始できます。updownchange

于 2013-03-09T10:19:59.753 に答える
1

そうです、列を削除するための別の方法は必要ありません。

失うデータがない場合は、'rake db:rollback' を試してから、もう一度 'rake db:migrate' を試すこともできます。

それは完全に機能します。:)

于 2013-03-09T10:21:08.477 に答える