8

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?

+0

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 –

Antwort

15

Sie können eine übergeben: an =>: Option zum Prüfer erstellen, so dass es nur auf der Registrierung überprüft hat:

validates_acceptance_of :tos_agreement, :allow_nil => false, :accept => true, :on => :create 
+1

Dies sollte als die richtige Antwort markiert werden. Es beantwortet einfach die Frage des ursprünglichen Posters. und genau das, was das OP ursprünglich verlangt hat. Wenn sich die Umstände später für das OP änderten, bedeutet dies nicht, dass derjenige, der Ihre genaue Frage beantwortet hat, diese Person angerechnet wird. – alybadawy

Verwandte Themen