Ich habe ein Active Modell , das zurückkehrt true
von valid?
(und .errors leer ist ), wird aber zurückkehrt false
aus save()
. Wie kann ich herausfinden, warum das Speichern fehlschlägt, wenn die Modellinstanz gültig ist?
89
Ich habe ein Active Modell , das zurückkehrt true
von valid?
(und .errors leer ist ), wird aber zurückkehrt false
aus save()
. Wie kann ich herausfinden, warum das Speichern fehlschlägt, wenn die Modellinstanz gültig ist?
Antworten:
Überprüfen Sie alle Ihre Rückrufe.
Ich hatte ein Problem wie dieses, bei dem ich eine "after_validate" -Methode hatte, die fehlschlug, nachdem ich einige Änderungen am Modell vorgenommen hatte. Das Modell war gültig, aber das "after_validate" gab false zurück. Wenn ich es also verwendete
model.valid
, sagte es true, aber wenn ich es speicherte, gab es mir Validierungsfehler (die vom after_validate-Rückruf durchlaufen wurden). Es war seltsam.Schauen Sie sich den Anwendungs-Trace an und Sie sollten sehen können, welche Codezeile die Ausnahme auslöst.
quelle
"Hey! That's MY fake leg!" # Believe it or not, this is important
. Nicht dass ich das tun würde. ;)true.tap { do_something }
Versuchen Sie es mit der Bang-Version
save!
(mit einem Ausrufezeichen am Ende) und überprüfen Sie den resultierenden Fehler.quelle
save!
können ausgelöst werdenActiveRecord::RecordInvalid
(da sie Validierungen ausführen) oderActiveRecord::RecordNotSaved
so möchten Sie sie retten..save
Fehler diagnostiziert werden können , die nicht auf eine Validierung zurückzuführen sind. Die "am wenigsten unbefriedigende" Qualifikation bezieht sich auf Rails, nicht auf diese Antwort.Wenn
@user.save
(zum Beispiel) zurückgegeben wirdfalse
, führen Sie dies einfach aus, um alle Fehler zu erhalten:quelle
Ja, ich habe dieses Problem behoben, indem ich sichergestellt habe, dass ich in all meinen before_ * -Rückrufen true zurückgebe, dann funktioniert es :)
quelle
Das Problem war, dass ich vergessen hatte, die Validierung zum Modell hinzuzufügen.
quelle