Wir verwenden Geräte für unsere Mitglieder. Wir haben unserem Memberschema ein tos_agreement-Feld (boolean) hinzugefügt und es zu views/devise/registrations/new.html.haml
hinzugefügt.Hinzufügen der TOS-Vereinbarung Kontrollkästchen mit Devise
Im Modell-Mitglied, haben wir eine Gültigkeitsregel wie folgt:
validates_acceptance_of :tos_agreement, :allow_nil => false,
:accept => true
Es funktioniert gut - wenn Sie die TOS nicht akzeptieren, können Sie nicht anmelden können.
Das Problem kommt jedoch mit der Bearbeitung Ihrer Einstellungen. Wenn Sie zu /members/edit
gehen, erhalten Sie das Formular, wo Sie Ihre E-Mail-Adresse oder Ihr Passwort ändern können. Es gibt kein Feld für die TOS-Vereinbarung, da dies zu diesem Zeitpunkt nicht änderbar sein sollte. Wenn Sie jedoch eine Änderung vornehmen (z. B. Ihr Kennwort ändern) und das Formular absenden, wird eine Fehlermeldung zurückgegeben, dass die TOS-Vereinbarung nicht falsch sein kann.
Wie können wir es sagen, niemals zu versuchen, die TOS-Vereinbarung nach der ersten Registrierung zu ändern?
Edit: so denke ich das grundlegende Problem ist, dass wir hatten: tos_agreement in unserem attr_accessible, das war eine sehr schlechte Idee jetzt denke ich daran. Aber wenn wir es entfernen, wie modifizieren wir Devise, um den Parameter zu akzeptieren und etwas damit zu tun, obwohl es nicht in der Masse zuweisbar ist?
Sie auch nicht wirklich ein Feld in der Datenbank für diese Art erstellen müssen von Variablen, Schienen werden nur ein virtuelles Feld für Sie erstellen. http://guides.rubyonrails.org/active_record_validations.html#acceptance –