当我在事务中保存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只能处理一个连接,因此无所谓。这是对的吗?
谢谢, 亚历克斯。
答案 0 :(得分:9)
是的,如果两个类使用相同的数据库连接,则表示正确。一个类可以使用establish_connection
连接到不同的数据库,但是你知道你是否正在这样做。因此,正如您正确建议使用A.transaction
或B.transaction
一样正常。
如果他们使用不同的数据库,您可以嵌套交易调用:
A.transaction do
B.transaction do
...
end
end
但在这种情况下没有必要。
答案 1 :(得分:7)
绝对正确。来自Rails API docs:
虽然在某些Active Record类上调用了事务类方法,但事务块中的对象不一定都是该类的实例。这是因为事务是按数据库连接,而不是每个模型。