Tag: 回滚

是否可以从事务块内重新引发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?

ActiveRecord Rollback在Rails测试中不起作用

抛出ActiveRecord :: Rollback可以正常工作,但不能在测试中使用。 我以前遇到过这个问题,我现在又有了这个问题,并且由于某种原因找不到其他人有这个问题的记录。 我这是因为每次测试运行时测试都会执行回滚,并且大多数数据库不支持嵌套的反向返回。 但是,我不能成为唯一一个涉及事务回滚的测试用例的人,所以也许我做错了。 以下测试用例失败(使用shoulda库,尽管相同的测试失败,基本的Test :: Unit): require ‘test_helper’ class RollbackTest < ActiveSupport::TestCase context "create a record and throw rollback" do setup do User.transaction do User.create! raise ActiveRecord::Rollback end end should_not_change("count of users") { User.count } end end 但是在控制台上: ?> User.transaction do ?> User.create! >> raise ActiveRecord::Rollback >> end => nil >> User.count […]