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

时间:2010-10-19 08:58:25

标签: ruby-on-rails transactions

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

a = A.new(...)  
b = B.new(...)

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

A.transaction do
  a.save
  b.save
end

B.transaction do
  a.save
  b.save
end

IMNO都使用相同的db事务,因为ActiveRecord只能处理一个连接,因此无所谓。这是对的吗?

谢谢, 亚历克斯。

2 个答案:

答案 0 :(得分:9)

是的,如果两个类使用相同的数据库连接,则表示正确。一个类可以使用establish_connection连接到不同的数据库,但是你知道你是否正在这样做。因此,正如您正确建议使用A.transactionB.transaction一样正常。

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

A.transaction do
  B.transaction do
   ...
  end
end

但在这种情况下没有必要。

答案 1 :(得分:7)

绝对正确。来自Rails API docs

  

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