Ruby Academy · Lektion

Valideringer og forespørgsler

Dataintegritet og forespørgsler

Lektion 4 af 413 trin

Valideringer og forespørgsler er en gratis Ruby Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Ruby Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ruby Academy-kurset indeholder 4 lektioner i alt.

Hvorfor validere?

Valideringer beskytter dine data, før de når databasen. De køres, når du gemmer en post, og afviser ugyldige data med nyttige meddelelser.

  • De holder ugyldige data ude (manglende navne, forkert udformede e-mailadresser).
  • De køres i Ruby, så meddelelser er nemme at vise til brugerne.
  • De supplerer databasebegrænsninger, men erstatter dem ikke.

Validering af tilstedeværelse

Den mest almindelige regel er validates :field, presence: true, som kræver en ikke-tom værdi. Hvis du gemmer uden den, mislykkes det, og der registreres en fejl.

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

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

Validering af entydighed

uniqueness: true forhindrer dubletter, f.eks. to brugere med den samme e-mailadresse. Kombinér den med et entydigt databaseindeks, fordi valideringen alene har et kapløbsproblem ved høj samtidighed.

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

Format og længde

Andre indbyggede valideringsregler:

  • length: { minimum: 8 } til størrelsesgrænser.
  • format: { with: /regex/ } til mønstre.
  • numericality: true til tal.
  • inclusion: { in: [...] } til tilladte værdier.
class User < ApplicationRecord
  validates :password, length: { minimum: 8 }
  validates :age, numericality: { greater_than: 0 }
end

valid? og errors

Kald valid? for at køre valideringer uden at gemme. Efter en mislykket gemning indeholder record.errors problemerne, og errors.full_messages giver læsbare strenge til brugerfladen.

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

save kontra save!

To måder at gemme på:

  • save returnerer true/false, så du kan afgøre det videre forløb ud fra resultatet.
  • save! udløser RecordInvalid ved fejl, hvilket er nyttigt, når ugyldige data skal udløse en undtagelse.

Det samme mønster gælder for create/create! og update/update!.

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

Brugerdefinerede valideringer

Til regler ud over de indbyggede skal du skrive en metode og registrere den med validate. Tilføj fejl 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

Forespørgsler med where

Forespørgselsgrænsefladen begynder med where, som filtrerer rækker. Den returnerer en relation med udskudt evaluering, som du kan kæde videre, før forespørgslen rammer databasen.

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

Sortering og begrænsning

Form resultater med metoder, der kan kædes:

  • order(created_at: :desc) sorterer.
  • limit(10) og offset(20) laver sideinddeling.
  • select(:id, :name) vælger kolonner.
User.where(active: true)
    .order(created_at: :desc)
    .limit(10)

Aggregater og udskudt indlæsning

Aggregathjælpere udfører databasefunktioner: count, sum(:amount), average(:age), maximum, minimum. Relationer er udskudte; forespørgslen udføres først, når du gennemløber relationen, kalder et aggregat eller bruger to_a.

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

Navngivne forespørgsler

En navngiven forespørgsel giver en genbrugelig forespørgsel et navn, så du kan sammensætte den på en enkel måde. Navngivne forespørgsler returnerer relationer og kan kædes sammen med hinanden og med where.

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

User.active.adults

Hurtig kontrol

Afprøv din forståelse af valideringer og forespørgsler.

Opsummering: Valideringer og forespørgsler

Du har lært at beskytte og hente data:

  • Valideringer som tilstedeværelse, entydighed, længde og format beskytter ved gemning.
  • valid? og errors rapporterer problemer; save! udløser en undtagelse.
  • Brugerdefinerede valideringer dækker særlige regler.
  • where, order, limit, aggregater og navngivne forespørgsler bygger udskudte forespørgsler.

Det afslutter kurset Modeller og Active Record.

Gratis at komme i gang

Lær Ruby med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
29
Lektioner
109

Ofte stillede spørgsmål

Er lektionen “Valideringer og forespørgsler” gratis?

Ja — alle 3 lektioner i læringssporet Ruby Academy, inklusive “Valideringer og forespørgsler”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Ruby Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Valideringer og forespørgsler”?

Dataintegritet og forespørgsler Du øver dig i Ruby Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Ruby Academy?

Der kræves ingen tidligere erfaring. Ruby Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Valideringer og forespørgsler”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Ruby Academy-lektion?

Ja. Alle Ruby Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Grundlæggende Active Record
  2. Migrationer
  3. Associationer
  4. Valideringer og forespørgsler
← Tilbage til Ruby Academy