在我的 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
我希望能够从回滚中解救出来,这样我就可以返回一个错误,指示哪个保存失败。
rescue ActiveRecord::Rollback => e
@foo.errors = e if @foo.errors.blank?
ensure
respond_with @foo
end
但是,我从来没有进入救援区。我认为这是因为,正如 rails 文档所述,事务块吃回滚异常并且不会重新引发它。有没有办法强制重新提出这个异常?