serious beibehalten: Validierungen nicht ausgelöst für verschachtelte Ressource mit fields_for

8

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

  • Das Profilmodell gehört zu Benutzer. Benutzer hat ein Profil
  • Im Anmeldeformular mit fields_for, um einige Profilfelder anzuzeigen (Geschlecht, Stadt und Land)
  • Was auch immer ich versucht habe, ich kann die Validierung nicht für Geschlecht und Stadt (fields_for-Profilfelder)
  • durchführen lassen

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

    
Rubytastic 08.07.2012, 12:09
quelle

3 Antworten

0

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 habe

FALSCH:

%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!

    
Rubytastic 19.07.2012, 16:33
quelle
3

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 .

    
sinisterchipmunk 15.07.2012 20:49
quelle
2

Ü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:

%Vor%

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 ).

    
rubyprince 13.07.2012 09:09
quelle