次のように、「foo」が正常に作成された後に「do_this」を実行し、「do_this」がエラーなしで実行されたときに「do_that」を実行する必要がある状況があります。
class Foo < ActiveRecord::Base
around_create do |foo, block|
transaction do
block.call # invokes foo.save
do_this!
do_that!
end
end
protected
def do_this!
raise ActiveRecord::Rollback if something_fails
end
def do_that!
raise ActiveRecord::Rollback if something_else_fails
end
end
また、いずれかが失敗した場合に備えて、トランザクション全体をロールバックする必要があります。
ただし、問題は、「do_this」または「do_that」が失敗した場合でも、「foo」が常に存続することです。何を与える?