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?
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 –