2010-10-19 3 views
10

Wenn ich zwei Objekte innerhalb einer TransaktionRails-Transaktion: Ist es wichtig, in welcher ActiveRecord-Modellklasse?

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

Spielt es eine Rolle, auf die Modellklasse Ich rufe die Transaktionsverfahren zu retten?

A.transaction do 
    a.save 
    b.save 
end 

oder

B.transaction do 
    a.save 
    b.save 
end 

IMNO verwenden beide die gleiche db Transaktion, da Active nur eine Verbindung umgehen kann, so sollte es keine Rolle. Ist das korrekt?

Danke, Alex.

Antwort

8

Ja, Sie sind korrekt, vorausgesetzt beide Klassen verwenden die gleiche Datenbankverbindung. Es ist möglich, dass eine Klasse establish_connection verwendet, um eine Verbindung zu einer anderen Datenbank herzustellen, aber Sie würden wissen, ob Sie das tun. Also, wie Sie richtig vorschlagen, entweder A.transaction oder B.transaction ist in Ordnung.

Wenn sie verschiedene Datenbanken Sie die Transaktion ruft Nest könnte verwendet haben:

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

aber das ist in diesem Fall nicht erforderlich.

7

Absolut richtig. Vom Rails API docs:

Obwohl die Transaktionsklasse Methode auf einige Active Record-Klasse aufgerufen wird, müssen die Objekte innerhalb des Transaktionsblock nicht alle Instanzen dieser Klasse sein. Dies liegt daran, dass die Transaktionen pro Datenbankverbindung und nicht pro Modell sind.

Verwandte Themen