Ruby Academy · Lektion

Grunderna i Active Record

Grunderna i ORM.

Lektion 1 av 413 steg

Grunderna i Active Record är en gratis lektion i Ruby Academy på CoddyKit. Detta är lektion 1 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.

Vad är Active Record?

Active Record är ORM-lagret (Object-Relational Mapper) i Rails. Det kopplar Ruby-objekt till rader i en databastabell, så att du arbetar med objekt i stället för rå SQL.

  • En klass motsvarar en tabell.
  • En instans motsvarar en rad.
  • Ett attribut motsvarar en kolumn.

Definiera en modell

En modell är en klass som ärver från ApplicationRecord (som i sin tur ärver från ActiveRecord::Base). Enligt konventionen kopplas en modell med namnet User automatiskt till tabellen users.

class User < ApplicationRecord
end

# Maps to the 'users' table
# Columns become attributes automatically

Konvention framför konfiguration

Active Record använder namnkonventioner så att du behöver skriva mindre konfiguration:

  • Klassnamn står i singular och CamelCase: User.
  • Tabellnamn står i plural och snake_case: users.
  • Primärnyckeln är som standard id.

Följ konventionerna så sköts det mesta av kopplingen automatiskt.

Skapa poster

Skapa rader med create, eller bygg en post och kör sedan save. create skapar en instans och sparar den i ett enda anrop.

user = User.create(name: "Ada", email: "ada@example.com")

# Or in two steps:
other = User.new(name: "Linus")
other.email = "linus@example.com"
other.save

Läs poster

Hämta poster med sökmetoder:

  • User.find(1) via primärnyckeln (kastar ett undantag om posten saknas).
  • User.find_by(email: 'a@b.com') via valfri kolumn (returnerar nil om posten saknas).
  • User.all för alla rader.
  • User.first och User.last.
user = User.find(1)
admin = User.find_by(role: "admin")
everyone = User.all

Uppdatera poster

Ändra attribut och kör sedan save, eller använd update för att tilldela värden och spara i samma steg. update returnerar true eller false beroende på valideringen.

user = User.find(1)
user.update(name: "Ada Lovelace")

# Equivalent two-step form:
user.name = "Ada Lovelace"
user.save

Ta bort poster

Ta bort rader med destroy (kör återanrop och hanterar associationer) eller delete (direkt SQL som hoppar över återanrop). Föredra destroy om du inte har ett särskilt skäl att kringgå återanrop.

user = User.find(1)
user.destroy

# Bulk destroy:
User.where(active: false).destroy_all

Attribut och spårning av ändringar

Active Record spårar osparade ändringar. Metoder som changed?, changes och name_was visar vad som har ändrats innan du sparar. Det är användbart i återanrop och loggning.

user = User.find(1)
user.name = "New Name"
puts user.changed?      # true
puts user.name_was      # old value
puts user.changes.inspect

Filen schema.rb

Active Record läser tabellstrukturen från databasen, inte från modellen. Den aktuella strukturen återspeglas i db/schema.rb, som genereras från migrationer. Du behöver sällan redigera den manuellt.

Vart tar SQL vägen?

Active Record omvandlar dina metodanrop till SQL i bakgrunden. User.find(1) blir SELECT * FROM users WHERE id = 1 LIMIT 1. Du kan se den genererade SQL-frågan med User.where(active: true).to_sql.

sql = User.where(active: true).to_sql
# => SELECT "users".* FROM "users" WHERE "users"."active" = TRUE

Varför är en ORM användbar?

Active Record ger dig:

  • Databassoberoende kod (PostgreSQL, MySQL, SQLite).
  • Skydd mot SQL-injektion genom parametriserade frågor.
  • Läsbar, objektorienterad åtkomst till data.

Du använder rå SQL endast i särskilda fall.

Snabbkontroll

Testa dina kunskaper om grunderna i Active Record.

Sammanfattning: Grunderna i Active Record

Du har lärt dig grunderna i ORM:

  • En klass motsvarar en tabell och en instans motsvarar en rad.
  • Konvention framför konfiguration hanterar namngivningen.
  • CRUD: create, find/find_by, update, destroy.
  • Spårning av ändringar visar osparade ändringar.
  • Active Record genererar säker SQL åt dig.

Nu hanterar vi databasschemat med migrationer.

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 ”Grunderna i Active Record” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Ruby Academy, inklusive ”Grunderna i Active Record”, 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 ”Grunderna i Active Record”?

Grunderna i ORM. 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 1 av 4.

Hur lång tid tar lektionen ”Grunderna i Active Record”?

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