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