我有这个域模型:用户拥有一组项目,并且项目的状态可能无法通过验证。
验证工作正常,我什至看到当我使用时会调用异常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, :errors => item.errors}, :status => :bad_request
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)