views:

27

answers:

2

When I have 2 objects to save inside a transaction

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

Does it matter on which model class I invoke the transaction method?

A.transaction do
  a.save
  b.save
end

or

B.transaction do
  a.save
  b.save
end

IMNO both use the same db transaction, because ActiveRecord can only handle one connection, thus it should not matter. Is that correct?

Thanks, Alex.

+1  A: 

Absolutely right. From the Rails API docs:

Though the transaction class method is called on some Active Record class, the objects within the transaction block need not all be instances of that class. This is because transactions are per-database connection, not per-model.

Chris
+1  A: 

Yes, you are correct provided both classes use the same database connection. It is possible for a class to use establish_connection to connect to a different database but you would know if you were doing that. So, as you correctly suggest using either A.transaction or B.transaction is fine.

If they were using different databases you could nest the transaction calls:

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

but that is not necessary in this case.

Shadwell