什么时候应该使用ActiveRecord交易?

时间:2012-03-01 04:23:19

标签: ruby-on-rails ruby-on-rails-3 activerecord

什么被认为是“最佳做法”或者什么应该包含在交易区块中的一般经验法则?

主要是当你要对一系列事物进行操作时,如果出现问题你想要回滚吗?类似的东西:

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

是否有其他情况可以在交易中执行事情?

1 个答案:

答案 0 :(得分:1)

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

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

ActiveRecord Transaction Documentation在讨论使用交易的方式和原因方面做得非常出色......如果您想了解更多信息,总会有Wikipedia article