是否可以从事务块内重新引发ActiveRecord :: Rollbackexception?

在我的rails应用程序中,我在控制器的创建操作中有一个事务块,我尝试在其中创建两个记录。

def create ActiveRecord::Base.transaction do @foo = Foo.new(params[:foo].except(:bar)) raise ActiveRecord::Rollback unless @foo.save @bar = Bar.new(params[:foo][:bar]) raise ActiveRecord::Rollback unless @bar.save end end 

我希望能够从Rollback中解救,这样我就可以返回一个错误,指出哪个保存失败了。

 rescue ActiveRecord::Rollback => e @foo.errors = e if @foo.errors.blank? ensure respond_with @foo end 

但是,我从未进入救援区。 我假设这是因为,正如rails文档所述,事务块会占用Rollbackexception并且不会重新引发它。 有没有办法强制重新引发此exception?