ruby-on-rails - Rails ActiveRecord 事务与类事务

标签 ruby-on-rails transactions

我对 Rails 事务类型有疑问。它们之间的区别是什么?分别使用什么?

事件记录事务

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交易是类交易

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

关于ruby-on-rails - Rails ActiveRecord 事务与类事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44247558/

相关文章:

sql - 仅通过在事务中运行存储过程就足以安全地对其进行测试吗?

mysql - 为什么要使用 SELECT FOR UPDATE? (MySQL)

java - 跨线程共享一个 jdbc "Connection"

ruby-on-rails - 如何在 Factory Girl Rails 中使用 Pry?

ruby-on-rails - 用于混合嵌套和非嵌套资源的 Rails Controller

ruby-on-rails - 如何在 ruby​​ on rails 应用程序中使用 postgresql "inner join"?

oracle - 事务上下文中 Oracle 存储过程/函数的语义

javascript - select2-rails gem 不适用于 Rails4

ruby-on-rails - Rails 缓存获取与故障转移

java - 运行时异常是@ApplicationException(rollback=false) 但事务最终回滚