空のダウン関数を使用してレール3.2の移行を生成しました。これは、移行が不可逆的であるため(例外をスローしたくないため)です。移行は正常に実行されますが、効果はありません。ロールバックしてdb:migrateを再度実行すると、エフェクトが適用されます。railsの移行は空のダウン関数では機能しません
何もしないコードで空の関数を埋めて簡単に解決しましたが、まだかなり醜いです。
これはなぜ起こるのですか?これはレールのバグですか?
空のダウン関数を使用してレール3.2の移行を生成しました。これは、移行が不可逆的であるため(例外をスローしたくないため)です。移行は正常に実行されますが、効果はありません。ロールバックしてdb:migrateを再度実行すると、エフェクトが適用されます。railsの移行は空のダウン関数では機能しません
何もしないコードで空の関数を埋めて簡単に解決しましたが、まだかなり醜いです。
これはなぜ起こるのですか?これはレールのバグですか?
データベースが破壊されないように例外がスローされます。不可逆的な場合は、そうするのが適切です。 あなた#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これは予想される動作です。
真@SergioTulentsev、それでも一部の人々は、質問のためにグーグルで、ここで着陸ものの、答えに値する;) – Ernest
おかげで、私も承知stackoverflowのは数週間前まで受け付ける機能を持っていなかった:) – Indigon