2 Stimmen

ActiveRecord-Transaktion und Rückgabe der gespeicherten ID des Modells

Ich möchte ActiveRecord-Transaktionen verwenden, um drei meiner Modelle zu speichern. Ich konnte einige gute Tutorials finden wie

http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

http://ar.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

Aber meine Frage ist, ich möchte meine erste Modell-ID zu erhalten und speichern Sie es als Fremdschlüssel mit meinem zweiten Modell. Soweit ich weiß, kann ich dies nicht tun, weil ich die gespeicherte ID nicht erhalten kann, bis die Transaktion bestätigt wird.

Hat jemand eine bessere Lösung oder Umgehung für dieses Problem? Ich verwende Rails 2.3.8.

3voto

apneadiving Punkte 112449

Wenn Sie Objekte mit Beziehungen speichern müssen, sollten Sie im Allgemeinen accepts_nested_attributes_for . Siehe Dokument hier .

Das ist bei weitem die sauberste und beste Vorgehensweise.

2voto

jefflunt Punkte 32855

Worüber?

SomeClass.transaction do
  first_record = SomeClass.create(... vars ...)
  second_record = SomeClass.create(... vars ...)
  third_record = SomeClass.create(... vars ...)

  second_record.update_attributes(:related_id=>first_record.id)
  third_record.update_attributes(:related_id=>second_record.id)
end

Dadurch würden die Objekte erstellt und die IDs in einer einzigen Transaktion zugewiesen. Schlägt dies fehl, sollten alle Datensätze zurückgesetzt werden, einschließlich der Erstellung der Datensätze.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X