加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读