Ruby Academy · Lektion

Valideringar och frågor

Dataintegritet och frågehantering.

Lektion 4 av 413 steg

Valideringar och frågor är en gratis lektion i Ruby Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Ruby Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Ruby Academy innehåller totalt 4 lektioner.

Varför validera?

Valideringar skyddar dina data innan de når databasen. De körs när du sparar en post och avvisar ogiltiga data med tydliga meddelanden.

  • De håller felaktiga data borta (saknade namn, felaktigt formaterade e-postadresser).
  • De körs i Ruby, så meddelanden är enkla att visa för användarna.
  • De kompletterar databaskonstraintar, men ersätter dem inte.

Närvarovalidering

Den vanligaste regeln är validates :field, presence: true, som kräver ett värde som inte är tomt. Om posten sparas utan ett sådant värde misslyckas sparandet och ett fel registreras.

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

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

Unikhetsvalidering

uniqueness: true förhindrar dubblettvärden, till exempel två användare med samma e-postadress. Kombinera den med ett unikt databasindex, eftersom valideringen ensam har ett kapplöpningstillstånd vid hög samtidighet.

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

Format och längd

Andra inbyggda validerare:

  • length: { minimum: 8 } för storleksbegränsningar.
  • format: { with: /regex/ } för mönster.
  • numericality: true för tal.
  • inclusion: { in: [...] } för tillåtna värden.
class User < ApplicationRecord
  validates :password, length: { minimum: 8 }
  validates :age, numericality: { greater_than: 0 }
end

valid? och errors

Anropa valid? för att köra valideringar utan att spara. Efter ett misslyckat sparande innehåller record.errors problemen, och errors.full_messages ger läsbara strängar för användargränssnittet.

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

save jämfört med save!

Det finns två sätt att spara:

  • save returnerar true/false, så resultatet kan användas för att välja gren i koden.
  • save! kastar RecordInvalid vid fel, vilket är användbart när ogiltiga data ska behandlas som ett undantag.

Samma mönster gäller för create/create! och update/update!.

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

Anpassade valideringar

För regler som går utöver de inbyggda validerarna skriver man en metod och registrerar den med validate. Lägg till problem via 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

Fråga med where

Frågegränssnittet börjar med where, som filtrerar rader. Det returnerar en lazy relation som kan kedjas vidare innan den når databasen.

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

Sortering och begränsning

Forma resultat med metoder som kan kedjas:

  • order(created_at: :desc) sorterar.
  • limit(10) och offset(20) används för paginering.
  • select(:id, :name) väljer kolumner.
User.where(active: true)
    .order(created_at: :desc)
    .limit(10)

Aggregeringar och lazy loading

Hjälpmetoder för aggregering kör databasfunktioner: count, sum(:amount), average(:age), maximum, minimum. Relationer är lazy; frågan körs först när relationen itereras över, när en aggregering anropas eller när to_a används.

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

Scopes

En scope namnger en återanvändbar fråga så att den kan komponeras på ett tydligt sätt. Scopes returnerar relationer och kan kedjas med varandra och med where.

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

User.active.adults

Snabb kontroll

Testa dina kunskaper om valideringar och frågor.

Sammanfattning: Valideringar och frågor

Du har lärt dig att skydda och hämta data:

  • Valideringar som närvaro, unikhet, längd och format skyddar sparningar.
  • valid? och errors rapporterar problem; save! kastar ett undantag.
  • Anpassade valideringar täcker särskilda regler.
  • where, order, limit, aggregeringar och scopes bygger lazy frågor.

Det avslutar kursen om Models och Active Record.

Gratis att börja

Lär dig Ruby med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
29
Lektioner
109

Vanliga frågor

Är lektionen ”Valideringar och frågor” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Ruby Academy, inklusive ”Valideringar och frågor”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Ruby Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Valideringar och frågor”?

Dataintegritet och frågehantering. Ni övar på Ruby Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Ruby Academy?

Du behöver inga förkunskaper. Utbildningen i Ruby Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Valideringar och frågor”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Ruby Academy-lektionen?

Ja. Varje Ruby Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Grunderna i Active Record
  2. Migreringar
  3. Associationer
  4. Valideringar och frågor
← Tillbaka till Ruby Academy