2012-04-09 10 views
1

空のダウン関数を使用してレール3.2の移行を生成しました。これは、移行が不可逆的であるため(例外をスローしたくないため)です。移行は正常に実行されますが、効果はありません。ロールバックしてdb:migrateを再度実行すると、エフェクトが適用されます。railsの移行は空のダウン関数では機能しません

何もしないコードで空の関数を埋めて簡単に解決しましたが、まだかなり醜いです。

これはなぜ起こるのですか?これはレールのバグですか?

+2

真@SergioTulentsev、それでも一部の人々は、質問のためにグーグルで、ここで着陸ものの、答えに値する;) – Ernest

+0

おかげで、私も承知stackoverflowのは数週間前まで受け付ける機能を持っていなかった:) – Indigon

答えて

6

データベースが破壊されないように例外がスローされます。不可逆的な場合は、そうするのが適切です。 あなた#downは次のようになります。

def down 
    raise ActiveRecord::IrreversibleMigration, "Explain why its irreversable!" 
    end 

それは明らかirreversable移行について通知し、その背後にある理由を説明しているように他の人に頭痛を大幅に節約すること:)

EDIT:を私はこれを確認することはできませんRails 3.2.3の動作私は#downなしでいくつかの異なる移行を作成し、exceptinoは提起されていません。たぶんあなたのコードの中に何かがあるかもしれませんが、これはちょっとしたことを示していません。

EDIT 2:だけおさらいに、あなたはActiveRecord::IrreversibleMigrationを高めるための方法、その責任をアップ/ダウン使用しています。そうでない場合、何も起こりません(#downはARで定義されているだけでnilを返します)。 #changeを使用すると、動作が異なります。場合によっては、ここで定義されている#inverseで例外を発生させることができます:https://github.com/rails/rails/blob/565bfb9cd49285ebaa170141b4996c22ba81de43/activerecord/lib/active_record/migration/command_recorder.rb#L39これは予想される動作です。

+0

これはおそらくですしかし、それは私が記述した振る舞いに答えることはできません:) – Indigon

+0

@Indigonが更新されました。 – Ernest

関連する問題