2010-10-19 8 views
10

Cuando tengo 2 objetos de ahorrar dentro de una transacciónTransacción de rieles: ¿importa en qué clase de modelo de ActiveRecord?

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

¿Importa en la que la clase del modelo invoco el método de transacción?

A.transaction do 
    a.save 
    b.save 
end 

o

B.transaction do 
    a.save 
    b.save 
end 

IMNO ambos utilizan la misma transacción db, porque ActiveRecord sólo puede manejar una conexión, por lo que no debería importar. ¿Es eso correcto?

Gracias, Alex.

Respuesta

8

Sí, es correcto siempre que ambas clases usen la misma conexión de base de datos. Es posible que una clase use establish_connection para conectarse a una base de datos diferente, pero usted sabría si estaba haciendo eso. Por lo tanto, como sugiere correctamente utilizar A.transaction o B.transaction está bien.

si estuvieran usando diferentes bases de datos que podría nido de la transacción llama:

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

pero que no es necesario en este caso.

7

Absolutamente correcto. Desde el Rails API docs:

Aunque el método de la clase de transacción se llama en alguna clase Active Record, los objetos dentro del bloque de transacción no tiene por qué ser todos los casos de esa clase. Esto se debe a que las transacciones son por conexión de base de datos, no por modelo.

Cuestiones relacionadas