我对 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/