Ruby on Rails:Walidacje
From Nasza Pasja - Programowanie
Jeżeli potrzebujemy sprawdzić czy w danym obiekcie zapisane są poprawne (z naszego punktu widzenia) dane, wystarczy dopisać metodę validate(). Zostanie ona wywołana przy każdej próbie zapisu (czyli przy wywołaniu metdody save()). Przykład:
def validate
if name=='dupa'
errors.add(:name, 'Niepoprawne imie')
end
end
Analogicznie jest z metodą validate_on_create wywoływaną przy tworzeniu nowego rekordu oraz validate_on_update wywoływaną przy jego aktualizacji
Spis treści |
Helpery validates_
Oczywiście można to zrobić jeszcze przyjemniej. ActiveRecord udostępnia helpery z których w łatwy sposób możemy skorzystać dodając wywołanie validates_costam wewnątrz klasy. Na pyrzkład:
class Wpis < ActiveRecord::Base validates_presence_of :tytul, :message => "musi byc podany" end
Zadba o to aby pole tytuł nie pozostało puste. W połączeniu z odpowiednio wygenerowanym formularzem oraz error_messages_for sprawdzanie danych staje się prawdziwą przyjemnością :)
Do każdego z poniżej wymienionych helperów można dołączyć opcję :if w ktorej ustawiamy metodę (lub wrzucamy kawałek kodu), która ma określić czy walidacja ma zostać przeprowadzona. Metoda powinna zwracać wartość true lub false.
Do wszystkich można równiez dołączyć opcję :message definiującą treśc błędu dodawaną do errors.
Dostępne sa następujące helpery:
Sprawdzanie czy pole nie jest puste
validates_presence_of
Sprawdzanie długości
validates_length_of validates_size_of (aliast do validates_length_of)
Dodatkowe upcje:
- :minimum - minimalna długość
- :maxinmum - maksymalna długość (chyba maximum???)
- :is - dokładny rozmiar
- :in - zakres długości (np. 2..8)
- :too_short - treśc informacji o błedzie gdy długość jest za krótka
- :too_long - treśc informacji o błedzie gdy długość jest za długa
- :too_short - treśc informacji o błedzie gdy długość nie jest odpowiednia (w przypadku użycia opcji :in)
- :allow_nil - dopuszczenie braku wartości
Sprawdzanie czy wartość jest liczbą
validates_numericality_of
Dodatkowe opcje:
- :only_integer - tylko liczby całkowite
- :allow_nil - dopuszczenie braku wartości
Sprawdzenie unikalności pola
validates_uniqueness_of
:scope - nazwy kolumn względem których wartość powinna być unikalna
Sprawdzanie czy checkbox został zaznaczony
Gwoli ścisłości, sprawdzanie czy wartość nie jest nil, jednak pole to nie musi być częścią modelu.
validates_acceptance_of
Sprawdzania identyczności dwóch pól
Drugie pole powinno mieć nazwę taką jak pierwsze ale z końcówką _confirmation (np. password i password_confirmation). Drugie pole nie musi być częścią modelu. Jako parametr podajemy jedynie pierwsze pole.
validates_confirmation_of
Porównanie z wyrażeniem regularnym
validates_format_of
Dodatkowe opcje:
- :with - wyrażenie regularne za pomocą którego pole ma być sprawdzone

