我有一个模型,当插入记录时,需要调用 Web 服务。
如果 web 服务失败(超时或其他失败),它们在数据库中的保存也应该被恢复。
我使用 after_save 回调并尝试在发生此类错误时引发 ActiveRecord::Rollback。
尽管它在 object.save 上返回 false,但它不会回滚事务。这样做的正确方法是什么?
我怎样才能确保不会创建记录?
我有一个模型,当插入记录时,需要调用 Web 服务。
如果 web 服务失败(超时或其他失败),它们在数据库中的保存也应该被恢复。
我使用 after_save 回调并尝试在发生此类错误时引发 ActiveRecord::Rollback。
尽管它在 object.save 上返回 false,但它不会回滚事务。这样做的正确方法是什么?
我怎样才能确保不会创建记录?
您是否将其包装在 Active Record 事务块中?
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。