0Pricing
Ruby Academy · Lekcja

Walidacje i zapytania

Integralność danych i odpytywanie

Walidacje i zapytania to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Dlaczego stosować walidację

Walidacje chronią dane, zanim trafią one do bazy danych. Są wykonywane podczas zapisywania rekordu i odrzucają nieprawidłowe dane, wyświetlając pomocne komunikaty.

  • Nie dopuszczają do zapisania niepoprawnych danych (brakujących nazw, nieprawidłowych adresów e-mail).
  • Są wykonywane w Ruby, więc wyświetlanie komunikatów użytkownikom jest proste.
  • Uzupełniają ograniczenia bazy danych, ale ich nie zastępują.

Walidacja obecności

Najczęściej stosowana reguła to validates :field, presence: true, która wymaga podania niepustej wartości. Próba zapisu bez niej kończy się niepowodzeniem i powoduje zarejestrowanie błędu.

class User < ApplicationRecord
  validates :name, presence: true
end

# User.create(name: "") fails to save

Walidacja unikalności

uniqueness: true zapobiega zduplikowanym wartościom, na przykład dwóm użytkownikom z tym samym adresem e-mail. Należy połączyć ją z unikalnym indeksem bazy danych, ponieważ sama walidacja może prowadzić do warunku wyścigu przy dużej współbieżności.

class User < ApplicationRecord
  validates :email, presence: true, uniqueness: true
end

Format i długość

Inne wbudowane walidatory:

  • length: { minimum: 8 } do określania limitów długości.
  • format: { with: /regex/ } do sprawdzania wzorców.
  • numericality: true do sprawdzania liczb.
  • inclusion: { in: [...] } do określania dozwolonych wartości.
class User < ApplicationRecord
  validates :password, length: { minimum: 8 }
  validates :age, numericality: { greater_than: 0 }
end

valid? i errors

Proszę wywołać valid?, aby uruchomić walidacje bez zapisywania rekordu. Po nieudanym zapisie obiekt record.errors zawiera problemy, a errors.full_messages zwraca czytelne komunikaty do interfejsu użytkownika.

user = User.new(name: "")
if user.valid?
  user.save
else
  puts user.errors.full_messages
end

save a save!

Dwa sposoby zapisu:

  • save zwraca true/false, więc logikę można rozgałęzić na podstawie wyniku.
  • save! zgłasza RecordInvalid w razie niepowodzenia, co jest przydatne, gdy nieprawidłowe dane powinny skutkować wyjątkiem.

Ten sam wzorzec dotyczy create/create! oraz update/update!.

user.save   # => false if invalid
user.save!  # => raises if invalid

Niestandardowe walidacje

W przypadku reguł wykraczających poza wbudowane walidatory należy napisać metodę i zarejestrować ją za pomocą validate. Problemy należy dodawać przez errors.add.

class User < ApplicationRecord
  validate :name_not_admin

  def name_not_admin
    if name == "admin"
      errors.add(:name, "cannot be admin")
    end
  end
end

Zapytania z użyciem where

Interfejs zapytań zaczyna się od where, które filtruje wiersze. Zwraca ono leniwą relację, którą można dalej łączyć z innymi warunkami, zanim zapytanie trafi do bazy danych.

User.where(active: true)
User.where("age > ?", 18)
User.where(role: ["admin", "editor"])

Sortowanie i ograniczanie wyników

Wyniki można kształtować za pomocą metod, które można łączyć:

  • order(created_at: :desc) sortuje wyniki.
  • limit(10) i offset(20) obsługują paginację.
  • select(:id, :name) wybiera kolumny.
User.where(active: true)
    .order(created_at: :desc)
    .limit(10)

Agregaty i leniwe ładowanie

Pomocnicze metody agregujące uruchamiają funkcje bazy danych: count, sum(:amount), average(:age), maximum, minimum. Relacje są lazy; zapytanie jest wykonywane dopiero podczas iterowania po wynikach, wywołania agregatu lub użycia to_a.

User.where(active: true).count
Order.sum(:total)
User.average(:age)

Scope

Scope nadaje nazwę wielokrotnego użytku zapytaniu, dzięki czemu można je przejrzyście komponować. Scope'y zwracają relacje i można je łączyć ze sobą oraz z where.

class User < ApplicationRecord
  scope :active, -> { where(active: true) }
  scope :adults, -> { where("age >= ?", 18) }
end

User.active.adults

Szybki test

Proszę sprawdzić, czy rozumieją Państwo walidacje i zapytania.

Podsumowanie: walidacje i zapytania

Poznali Państwo sposoby ochrony i pobierania danych:

  • Walidacje, takie jak obecność, unikalność, długość i format, chronią operacje zapisu.
  • valid? i errors zgłaszają problemy, a save! zgłasza wyjątek.
  • Niestandardowe walidacje obsługują specjalne reguły.
  • where, order, limit, agregaty i scope'y służą do budowania leniwych zapytań.

To kończy kurs dotyczący modeli i Active Record.

Często zadawane pytania

Czy lekcja „Walidacje i zapytania” jest bezpłatna?

Tak — pełny tekst „Walidacje i zapytania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Walidacje i zapytania”?

Integralność danych i odpytywanie Ćwiczysz Ruby Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Ruby Academy?

Nie wymagamy żadnego doświadczenia. Ruby Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Walidacje i zapytania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Ruby Academy?

Tak. Każda lekcja Ruby Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy Active Record
  2. Migracje
  3. Powiązania
  4. Walidacje i zapytania
← Powrót do Ruby Academy