我有一种情况,我需要在成功创建 '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' 也会一直存在。是什么赋予了?