0

在我的 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 文档所述,事务块吃回滚异常并且不会重新引发它。有没有办法强制重新提出这个异常?

4

0 回答 0