Rails事务:哪个ActiveRecord模型类重要?

agr*_*eif 11 transactions ruby-on-rails

当我有2个对象保存在事务中时

a = A.new(...)  
b = B.new(...)
Run Code Online (Sandbox Code Playgroud)

我调用事务方法的模型类是否重要?

A.transaction do
  a.save
  b.save
end
Run Code Online (Sandbox Code Playgroud)

要么

B.transaction do
  a.save
  b.save
end
Run Code Online (Sandbox Code Playgroud)

IMNO都使用相同的db事务,因为ActiveRecord只能处理一个连接,因此它无关紧要.那是对的吗?

谢谢,亚历克斯.

Sha*_*ell 9

是的,如果两个类使用相同的数据库连接,则表示正确.类可以establish_connection用来连接到不同的数据库,但是你知道你是否正在这样做.所以,正如你正确建议使用其中任何一个A.transactionB.transaction很好.

如果他们使用不同的数据库,您可以嵌套事务调用:

A.transaction do
  B.transaction do
   ...
  end
end
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,这不是必要的.


Cho*_*ett 7

绝对正确.从Rails API文档:

虽然在某些Active Record类上调用了事务类方法,但事务块中的对象不一定都是该类的实例.这是因为事务是按数据库连接,而不是每个模型.