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:
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.
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.
Tags und Links ruby-on-rails activerecord