1

レコードが挿入されたときに Web サービスを呼び出す必要があるモデルがあります。

Web サービスが失敗した場合 (タイムアウトまたはその他の障害)、データベースへの保存も元に戻す必要があります。

after_save コールバックを使用して、この種のエラーが発生したときに ActiveRecord::Rollback を発生させようとしました。

object.save で false を返しますが、トランザクションをロールバックしません。これを行う適切な方法は何ですか?

レコードが作成されないようにするにはどうすればよいですか?

4

2 に答える 2

1

これを Active Record Transaction ブロックでラップしていますか?

User.transaction do
  User.create(:username => 'Kotori')
  User.transaction(:requires_new => true) do
    User.create(:username => 'Nemu')
    raise ActiveRecord::Rollback
  end
end

参照:

http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

于 2012-06-01T15:01:27.357 に答える
1

それを使用before_saveして false を返すようにしてください。

于 2012-06-01T15:02:18.573 に答える