Valideringer og forespørgsler
Dataintegritet og forespørgsler
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 saveValidering 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
endFormat og længde
Andre indbyggede valideringsregler:
length: { minimum: 8 }til størrelsesgrænser.format: { with: /regex/ }til mønstre.numericality: truetil tal.inclusion: { in: [...] }til tilladte værdier.
class User < ApplicationRecord
validates :password, length: { minimum: 8 }
validates :age, numericality: { greater_than: 0 }
endvalid? 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
endsave kontra save!
To måder at gemme på:
savereturnerertrue/false, så du kan afgøre det videre forløb ud fra resultatet.save!udløserRecordInvalidved 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 invalidBrugerdefinerede 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
endForespø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)ogoffset(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.adultsHurtig 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?ogerrorsrapporterer 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.
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
- Grundlæggende Active Record
- Migrationer
- Associationer
- Valideringer og forespørgsler