我有一个模型,当插入一条记录时,需要调用一个web服务。Rails 3:取消插入after_save
如果Web服务失败(超时或其他失败),则它们还应该还原数据库中的保存。
我使用after_save回调,并试图在发生这种错误时引发ActiveRecord :: Rollback。
虽然它在object.save上返回false,但它不回滚事务。这样做的正确方法是什么?
我怎样才能确保记录不会被创建?
我有一个模型,当插入一条记录时,需要调用一个web服务。Rails 3:取消插入after_save
如果Web服务失败(超时或其他失败),则它们还应该还原数据库中的保存。
我使用after_save回调,并试图在发生这种错误时引发ActiveRecord :: Rollback。
虽然它在object.save上返回false,但它不回滚事务。这样做的正确方法是什么?
我怎样才能确保记录不会被创建?
您是否将此包装在活动记录交易区块中?
User.transaction do
User.create(:username => 'Kotori')
User.transaction(:requires_new => true) do
User.create(:username => 'Nemu')
raise ActiveRecord::Rollback
end
end
另请参见:
http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html
尝试使用before_save
,并从中返回false。
这会触发更新以及 –
您可以检查模型中的'id'问题。只有在插入数据库之后,'id'才会出现。 –