8

Używamy urządzenia dla naszych członków. Dodaliśmy pole tos_preement (boolean) do naszego schematu członkowskiego i dodaliśmy go do views/devise/registrations/new.html.haml.Dodanie pola wyboru umowy TOS z Devise

W modelu państw, mamy regułę walidacji następująco:

validates_acceptance_of :tos_agreement, :allow_nil => false, 
    :accept => true 

To działa dobrze - jeśli nie akceptują TOS, nie można zarejestrować.

Jednak problem dotyczy edycji ustawień. Jeśli przejdziesz na stronę /members/edit, otrzymasz formularz, w którym możesz zmienić swój adres e-mail lub hasło. Nie ma pola dla umowy TOS, ponieważ nie powinno to w tym momencie podlegać zmianie. Jednak po wprowadzeniu zmiany (np. Zmianie hasła) i przesłaniu formularza, zwraca komunikat o błędzie, że umowa TOS nie może być fałszywa.

Jak możemy powiedzieć, aby nigdy nie próbowała modyfikować umowy TOS po pierwszej rejestracji?

Edit: więc myślę, że podstawowym problemem jest to, że mieliśmy: tos_agreement w naszej attr_accessible, który był bardzo zły pomysł, teraz myślę o niej. Ale jeśli go usuniemy, w jaki sposób zmodyfikujemy Devise, aby zaakceptować parametr i coś z nim zrobić, mimo że nie można go przypisać do masy?

+0

też nie faktycznie trzeba utworzyć pole w bazie danych dla tego rodzaju zmienne, szyny po prostu utworzą dla Ciebie wirtualne pole. http://guides.rubyonrails.org/active_record_validations.html#acceptance –

Odpowiedz

15

można podać: na =>: tworzenie opcję walidator, dzięki czemu jest to sprawdzane tylko na rejestrację:

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

To powinno być oznaczone jako poprawna odpowiedź. Po prostu odpowiada na pytanie o oryginalny plakat. i dokładnie to, o co pierwotnie prosił OP. jeśli okoliczności zmieniły się później w przypadku PO, nie oznacza to uznania tej osoby, która odpowiedziała na Twoje dokładne pytanie. – alybadawy