22

簡単な質問。レコードが保存された後に後処理を実行したいActiveRecordモデルがあります。そのため、モデルには、Resqueキューにジョブを固定するqueue_for_processingメソッドがあります。レコードが正常に永続化された後にこれを実行するために、モデルに次のように記述しました。

after_create :queue_for_processing

ものすごく単純。昨夜、redisサーバーがダウンし、問題が発生したことを除いて、すべてが期待どおりに機能していると思っていました。私の期待は、レコードがまだ保存され、後で手動でジョブを処理できることでした。しかし、queue_for_processingメソッドは例外(予期される動作)をスローし、レコードの保存を停止しています。

after_createがどのように機能するか誤解していますか?それとも私の理解は正しく、何かファンキーなことが起こっていますか?

ありがとう。

4

1 に答える 1

43

はい、コールバックはすべてトランザクションにまとめられています。

基本的に、以下はロールバックを引き起こします:

  • before_saveまたは同様のコールバックからfalseを返します
  • 例外before_saveまたは同様のコールバック
  • 例外after_saveまたは同様のコールバック(after_create)

以下はロールバックを引き起こしません:

  • after_saveまたは同様のコールバックからfalseを返します
  • の例外after_commit

例外によってロールバックが発生しないようにする場合は、after_commit

于 2012-09-03T02:13:29.020 に答える