繁体   English   中英

什么时候应该使用ActiveRecord事务?

[英]when should an ActiveRecord transaction be used?

什么时候应该将某些东西包裹在交易块中,这是“最佳实践”或一般的经验法则?

它主要是只是在您要对一组事物执行操作时,并且如果某件事发生中断时您想要回滚吗? 就像是:

class User < ActiveRecord::Base
  def mark_all_posts_as_read!
    transaction do
      posts.find_each { |p| p.update_attribute(:read, true) }
    end 
  end
end

在其他情况下,在事务内执行操作会更有利吗?

我不确定这是否适合用于事务:通常,如果一个对象的状态取决于另一对象的状态,则我只会在模型中使用事务。 如果任何一个对象的状态不正确,那么我就不想提交任何一个。

当然,经典的例子是银行帐户。 如果要将资金从一个帐户转移到另一个帐户,则不想将其添加到接收帐户中,进行保存,然后从发送帐户中扣除。 如果其中任何一个出现问题,那么钱就消失了,您将有一些非常生气的客户。 在一个事务中完成这两个部分可确保如果发生错误,则两个都不会向数据库提交任何内容。

ActiveRecord事务处理文档在讨论如何以及为什么使用事务处理方面做得非常出色,而且如果您还需要更多信息,也可以查阅Wikipedia文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM