繁体   English   中英

Rails ActiveRecord事务与类事务

[英]Rails ActiveRecord Transaction vs Class Transaction

我对Rails Transaction类型有疑问。 他们和每个人之间的差异是什么?

活动记录交易

ActiveRecord::Base.transaction do
    david.withdrawal(100)
    mary.deposit(100)
end

类交易

Account.transaction do
    balance.save!
    account.save!
end

实例交易

account.transaction do
    balance.save!
    account.save!
end

非常感谢你提前!

AR Transaction是类交易

Account < ActiveRecord::Base
end

Account.transaction(block) == ActiveRecord::Base.transaction(block)

http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html https://apidock.com/rails/ActiveRecord/Transactions/ClassMethods/transaction

实例事务是一种便捷方法

DB事务的实例方法是一种方便的方法,可以获得更多语法上更漂亮的代码。

你可以这样做。

account = Account.find(1)
ActiveRecord::Base.transaction do
  account.save!
end

对于上述任何一种情况都是一样的。 无论哪种方式,它都在事务中生成SQL代码。

证明在事务的实例方法的源代码中。

# File activerecord/lib/active_record/transactions.rb, line 276
def transaction(options = {}, &block)
  self.class.transaction(options, &block)
end

https://apidock.com/rails/v4.2.7/ActiveRecord/Transactions/transaction

暂无
暂无

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

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