背景以下のよう
な
Rails移行スクリプトがあり
ます
。......0011_update_column1_for_internal_projects.rb
...
...
0022_create_audits.rb
モデルで発生したイベントを追跡するためにAuditsテーブルを更新するInternalProjectモデルのafter_create/update/deleteコールバックを作成しました。
コードスニペット
DB移行スクリプト--0011--のself.upメソッドは次のように定義されています。
def self.up
InternalProject.all.each do |project|
project.column1 = project.column2
project.save!
end
end
副作用
0022スクリプトでは、内部プロジェクトのシードデータをロードするためのテストフィクスチャがあるため、スクリプト0011の移行に失敗する状況に陥りました。これは失敗します。これは、InternalProjectの保存中にコールバックがトリガーされ、DB状態のその瞬間に、0022が実行されていないため、監査テーブルが存在しないため、テーブルが存在しないことを嘆くSQLエラーが発生するためです。 。
私の質問1.InternalProjectの
保存時にコールバックが呼び出されないようにするには、0011 DB移行スクリプトを修正するにはどうすればよいですか?これを行うためのきちんとした方法を知りたいです。
2.そのような更新スクリプトが削除されるのではないかと思います。それは悪い考えですか?DB移行でのデータ操作用のスクリプトが必要ですか?
3. DB移行スクリプトにデータ操作スクリプトを含める必要がありますが、それについて何かできることはありますか?