Ich habe mich ernsthaft an ein Problem gehalten, bei dem ich ein Benutzer- und Profilmodell habe. Was auch immer ich versuche, es scheint, dass Validierungen für keines der Profilattribute ausgelöst werden
Mein Formular:
%Vor%Mein Benutzermodell hat Folgendes:
%Vor%Mein Profilmodell mit Validierungen ist wie folgt:
%Vor%Meine PARAMS:
%Vor%Die Rails-Konsole funktioniert:
%Vor%Profil.neu
%Vor%- UPDATE 19 Jul '12
Ich habe das
hinzugefügt %Vor%Auf das Formular, um zu sehen, was genau passiert und das wirft die folgende Liste von Fehlern auf:
%Vor%So scheint es, dass die Validierung überprüft wird .... Aber kein Fehler Styling wird angewendet! Auch das Profil ist ungültig ???? Ich bin mir nicht sicher, aber das bezieht sich auf das
Viele Stunden haben versucht, dies zu beheben, jetzt ist die Lösung sehr einfach basierend auf den Vorschlägen in diesem Thema, die ich anstelle von
herausgefunden habeFALSCH:
%Vor%RICHTIG:
%Vor%was das tut, ist nicht das Profil zu reinigen, sondern das alte, wenn es verfügbar ist ... also nicht alle Fehler zu bereinigen! hoffe das hilft jemandem in der Zukunft!
Zunächst enthalten die eingefügten Parameter Werte für die Stadt, das Land und das Geschlecht des Profils. Wenn dies korrekt ist, sollte Validierung bestanden werden, weil das Profile
-Modell das Vorhandensein dieser 3 Felder validiert - und sie sind vorhanden.
Ich stelle auch fest, dass Sie resource.build_profile
in der Ansicht ausführen, wodurch ein Standardprofil erstellt werden soll, das dem Benutzer gehört. Wenn während der Instanziierung Werte im Profil zugewiesen werden, würde dies dazu führen, dass sie in das Formular und schließlich in den params-Hash gelangen.
Also denke ich, dass Sie die Felder irgendwo entlang der Linie bevölkern, vielleicht in den Modellen User
oder Profile
. Sie sollten diese überprüfen, insbesondere während der Initialisierung eines neuen Profils.
Das ist alles, was ich aus den Daten erraten kann, die Sie gegeben haben. Wenn Sie das Problem immer noch nicht finden, können Sie es (oder eine separate App, die das Problem reproduziert, wenn Sie Ihre echte App nicht teilen möchten) an GitHub übergeben, damit wir das Problem direkter analysieren können.
>EDIT: gerade bemerkt, in Ihrer Prämie schrieben Sie:
Jeder kann ein funktionierendes Beispiel [von] verschachtelten Ressourcen und Validierungen
bereitstellen
Siehe Ссылка für ein einfaches Beispiel für die Benutzerüberprüfung mit geschachtelten Attributen für ein Profil, das Ihrer Frage nachempfunden ist. Es validiert User#email
, Profile#city
, Profile#country
und Profile#gender
.
Überprüfen Sie, ob Sie einen Standardwert im Datenbankset haben. Es scheint, dass Sie im Formular params die Frage eingefügt haben, gender hat den Wert male
bestanden. Ist diese Form params auch bestanden, wenn Sie nichts für Geschlecht überprüft haben? In diesem Fall muss dies der Fall sein, in dem das Feld Geschlecht in der Datenbank den Standardwert für Geschlecht als male
haben muss. In diesem Fall wird sogar ein neues Profile
-Modellobjekt sein Geschlecht als male
haben, und so wird es die Validierungen bestehen und das Geschlecht als male
in der Datenbank speichern. Zum Beispiel habe ich ein boolesches Feld is_admin
in der Benutzertabelle und setze seinen Standardwert als false
oder 0
. Dann wenn ich das tue:
Sie können sehen, dass das Attribut is_admin
auf false
anstelle von nil
gesetzt ist. Wenn nun kein Wert für is_admin
übergeben wird, wird er hier als false
in der Datenbank gespeichert und löst auch nicht die Validierung für das is_admin
-Feld aus, wie es in den Objektattributen vorhanden ist (mit Wert false
).
Tags und Links ruby-on-rails-3 ruby-on-rails activerecord validation nested-attributes