Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 用ActiveRecord冒泡嵌套事务失败大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在服务对象中有一个方法,该方法组合应该包含在事务中的操作.其中一些操作也包裹在事务中.例如:
class PostCreator
   def create
      ActiveRecord::Base.transaction do
        post.do_this
        post.do_that
        user.do_more(post,other_stuff)
      end
   end
 end

 def Post
   def do_this
     transaction do; ...; end
   end
 end

我需要任何嵌套的失败来一直到顶部,但我不知道如何发生这种情况,而在nested transactions的ActiveRecord文档似乎没有提供一个解决方案.从文档:

# Standard nesTing

User.transaction do
  User.create(username: 'Kotori')
  User.transaction do
    User.create(username: 'Nemu')
    raise ActiveRecord::rollBACk    #  This won't bubble up:
                                    #  _Both_ users will still be created.
  end
end

# nesTing with `requires_new: true` on the nested transaction

User.transaction do
  User.create(username: 'Kotori')
  User.transaction(requires_new: truE) do
    User.create(username: 'Nemu')
    raise ActiveRecord::rollBACk    #  This won't bubble up either
                                    #  "Kotori" will still be created.
  end
end

解决方法

以下是您可以在嵌套交易中获得失败的原因:
User.transaction do
  User.create(username: 'Kotori')
  raise ActiveRecord::rollBACk unless User.transaction(requires_new: truE) do
    User.create(username: 'Nemu')
    raise ActiveRecord::rollBACk
  end
end

基本上,您必须在您的顶级事务中引发错误,以使其回滚.为了做到这一点,如果嵌套事务返回一个假的值(nil)或一个真值,你会引发一个错误.

希望有帮助!

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – 用ActiveRecord冒泡嵌套事务失败全部内容,希望文章能够帮你解决ruby-on-rails – 用ActiveRecord冒泡嵌套事务失败所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。