Speichern eines aktiven Datensatzes, in welcher Reihenfolge werden die zugehörigen Objekte gespeichert?

8

In Schienen werden beim Speichern eines active_record-Objekts die zugehörigen Objekte ebenfalls gespeichert. Aber has_one und has_many association haben unterschiedliche Reihenfolge beim Speichern von Objekten.

Ich habe drei vereinfachte Modelle:

%Vor%

Ich habe erwartet, dass, wenn team.save aufgerufen wird, das Team vor dem zugehörigen Trainer und den Spielern gespeichert werden sollte.

Ich verwende den folgenden Code, um diese Modelle zu testen:

%Vor%

team.save! gibt true zurück.

Aber in einem anderen Test:

%Vor%

team.save! gibt den folgenden Fehler:

%Vor%

Ich habe herausgefunden, dass team.save! Objekte in der folgenden Reihenfolge speichert: 1) Spieler, 2) Team und 3) Trainer. Deshalb habe ich den Fehler erhalten: Wenn ein Spieler gespeichert wird, hat das Team noch keine ID, also ist validates_presence_of :team_id im Spieler fehlgeschlagen.

Kann mir jemand erklären, warum Objekte in dieser Reihenfolge gespeichert werden? Das erscheint mir nicht logisch.

    
Shuo 20.04.2010, 03:20
quelle

2 Antworten

0

Sie sollten "validates_associated" verwenden, um dies zu erreichen

check Hier

Etwas wie folgt, aber keine Überprüfung

%Vor%

In Ihrem Controller

%Vor%     
Salil 20.04.2010 05:32
quelle
-1

Sehen wir uns Ihren fehlgeschlagenen Test an:

%Vor%

Das Hinzufügen eines neuen Spielers zur team.players-Assoziation versucht, die team_id auf Spielern genau dort in Zeile 2 zu setzen. Das ist genau wie das & lt; & lt; Betreiber arbeitet. Es wird nicht aktualisiert, wenn du das Team speichst. Selbst wenn das Team zuerst gespeichert wird, hat der Spieler immer noch eine Null-Team-ID. In diesem Fall können Sie es leicht lösen, indem Sie die Zeilen 2 und 3 vertauschen.

    
sockmonk 08.03.2013 16:48
quelle

Tags und Links