Techioz Blog

Rails ActiveRecord のロールバックは、例外が発生したときに発生するはずの場所で発生しませんでした。

概要

book という名前のオブジェクトがあるとします。 一度予約して保存してください!すべてのモデル コールバックは、定義されたレールの順序に従ってトリガーされます。 私の場合、API リクエストのタイムアウト例外が around_save コールバックの途中で発生しました。私の理解では、after_commit がトリガーされなかったため、このトランザクションはロールバックされる必要があるということです。しかし、私の場合、データはDBに保存されました。私に何が足りないのか。誰か助けてくれませんか。レール初心者です。

これをどう理解すればよいかわかりません。 Ruby 2.7.5 と Rails 4.2.11 を使用する

解決策

モデルのコールバックや検証などを定義した場所に、より多くの情報を記載するとより良いでしょう。

たとえば、before_save コールバックでいくつかの検証がある場合は、エラーを追加した後に :abort をスローすることが重要です。