ruby-on-rails – 在失败的save()之后Rails没有回滚事务
发布时间:2020-12-17 02:38:03 所属栏目:百科 来源:网络整理
导读:我有这个域模型:用户有一组项目,项目的状态可能无法通过验证. 验证工作正常,我甚至看到当我使用save时调用异常! 在我的控制器中,我有这个: @user.items() itemif @user.save render :json = {},:status = :okelse render :json = {:status = :error,:erro
我有这个域模型:用户有一组项目,项目的状态可能无法通过验证.
验证工作正常,我甚至看到当我使用save时调用异常! 在我的控制器中,我有这个: @user.items() << item if @user.save render :json => {},:status => :ok else render :json => {:status => :error,:errors => item.errors},:status => :bad_request end 第一个POST成功,第二个POST失败,但是当我点击索引时,我仍然看到两个对象,好像第二个事务从未回滚过.到底是怎么回事? 我的测试是这样的: post :create post :create get :index ActiveSupport::JSON.decode(response.body).length.should == 1 编辑:即使在运行服务器时,也不会回滚事务(sqlite3). 解决方法
将项添加到集合会立即保存它(除非用户未保存).
对save的调用会创建自己的事务,即回滚的事务,而不是保存项目的事务 您可以通过显式创建一个来强制所有事务进入同一事务. begin User.transaction do @user.items << item @user.save! render :json => {},:status => :ok end rescue ActiveRecord::RecordInvalid render :json => {:status => :error,:status => :bad_request end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |