Valideringar och frågor
Dataintegritet och frågehantering.
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 saveUnikhetsvalidering
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
endFormat och längd
Andra inbyggda validerare:
length: { minimum: 8 }för storleksbegränsningar.format: { with: /regex/ }för mönster.numericality: trueför tal.inclusion: { in: [...] }för tillåtna värden.
class User < ApplicationRecord
validates :password, length: { minimum: 8 }
validates :age, numericality: { greater_than: 0 }
endvalid? 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
endsave jämfört med save!
Det finns två sätt att spara:
savereturnerartrue/false, så resultatet kan användas för att välja gren i koden.save!kastarRecordInvalidvid 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 invalidAnpassade 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
endFrå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)ochoffset(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.adultsSnabb 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?ocherrorsrapporterar 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.
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
- Grunderna i Active Record
- Migreringar
- Associationer
- Valideringar och frågor