Ich habe ein Active Modell , das zurückkehrt truevon valid?(und .errors leer ist ), wird aber zurückkehrt falseaus save(). Wie kann ich herausfinden, warum das Speichern fehlschlägt, wenn die Modellinstanz gültig ist?
Ich habe ein Active Modell , das zurückkehrt truevon valid?(und .errors leer ist ), wird aber zurückkehrt falseaus 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.
"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.
save!können ausgelöst werden ActiveRecord::RecordInvalid(da sie Validierungen ausführen) oder ActiveRecord::RecordNotSavedso möchten Sie sie retten.
.saveFehler 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 wird false, führen Sie dies einfach aus, um alle Fehler zu erhalten:
@user.errors.full_messages
Ja, ich habe dieses Problem behoben, indem ich sichergestellt habe, dass ich in all meinen before_ * -Rückrufen true zurückgebe, dann funktioniert es :)
Das Problem war, dass ich vergessen hatte, die Validierung zum Modell hinzuzufügen.
class ContactGroup < ActiveRecord::Base
validates_presence_of :name
end