2

を拡張する特定のクラスではActiveRecord::Base、この ActiveRecord オブジェクトが作成されるたびに、別の ActiveRecord オブジェクトを更新する必要があります。メソッドをオーバーライドしてsave、保存時に次のことを行っても安全ですか?

def save
  super
  other = self.other
  other.name = self.name
  other.save!
end

潜在的なトランザクション関連の問題が心配です。これはすべて 1 つのトランザクションになると思いますが、いずれかの部分が失敗した場合、すべてがロールバックされますか?

4

1 に答える 1

14

この目的のために提供されたフックを使用しない特定の理由はありますか?

after_createafter_saveafter_updatebefore_createbefore_savebefore_update- 、その他多数あります。それらのいずれかが適切ではないでしょうか?

実際、あなたが言ったことbefore_saveを考えると、2番目のモデルの保存中に発生したエラーをキャッチし、最初のモデルが保存されないようにすることができるので、それはあなたが望むもののように思えます(before_save呼び出しから false を返すことにより)。

于 2012-11-20T09:15:05.783 に答える