ord och kod
admin - januari 14, 2022NERD ALERT: jag älskar databaser. Gud, de är bara fantastiska. Få saker ger mig så mycket glädje som en tom whiteboard och ett par intrikata gå tabeller som måste skissas ut. Men det finns också en konst att förstå hur man hanterar data – särskilt när du har en skit ton av det.
huvudproblemet som människor stöter på med data är först, hur man ska lagra det och för det andra hur man ska få det när du faktiskt behöver det! Det låter dock inte superkomplicerat, eller hur? Fel. Databaser växer vertikalt, inte horisontellt, och de växer hella snabbt. Vid en viss punkt, det sätt som du går om att lagra dina data hamnar direkt påverkar hur du går om att hämta det!
många Rubyister skriver olika hjälpmetoder för att göra sin Fråga för dem. Men det här är Rails Land, vilket innebär att vi har black Rails magi till vårt förfogande. Och med tillkomsten av Rails 4.1 har den magin nu ett namn: enum.
Få Yo Enum På
När Skenor 4.1 släpptes för mindre än ett år sedan, det kom ut med en massa nya funktioner. En av dem var ActiveRecord enums, som i huvudsak skar ut många metoder och överflödig kod.
ActiveRecord enums låter dig manipulera attributen för ett ActiveRecord-objekt i Rails så att ett attributs värden mappas till heltal i databasen (i motsats till strängar), och ändå kan också frågas med namn. Om allt detta låter lite galet för dig, det beror på att det är! Enums är ganska coola eftersom de har flexibiliteten hos en sträng, men hastigheten och effektiviteten hos ett heltal. Du kan slå upp värden i en enorm databas med ett heltal, men du kan också uppdatera och lägga till attribut som sträng. Åh-du får också en massa metoder gratis!
så hur fungerar denna magi, exakt? Jag trodde att du aldrig skulle fråga!
Flera Kolumner?! Ingen har tid för det!
för att visa hur man implementerar ActiveRecord enums fortsätter jag att använda förra veckans ecommerce bookstore-app som mitt exempel. Så jag har dessa Book
objekt i min butik, och jag vill hålla reda på vad deras status är: antingen in stock
, out of stock
eller ordered
. För enkelhetens skull låtsas vi att jag inte är en super sofistikerad bokhandlare, så jag har inte mycket Book
s, och därför kan varje Book
objekt bara ha en av dessa tre stater.
Jag kan först börja med att ha tre olika kolumner för att representera var och en av dessa stater:
1234567 |
|
men detta verkar typ av…löjligt. Jag kommer alltid att ha två tomma kolumner. Den här koden har mig alla som:
Alternativt kan jag kombinera alla dessa kolumner i en och använda några hjälpmetoder som returnerar booleska värden när jag ringer dem på en instans av en Book
:
12345678910111213 |
|
Tja, nu har jag en kolumn, så det är bättre. Men det här är fortfarande så repetitivt, fult och ineffektivt. Oroa dig inte, det är på väg att bli riktigt bra.
fråga ditt lilla hjärta ut
att implementera enum är ganska enkelt. Lägg först till makrot i din klass:
123 |
|
Du kommer att märka att jag har min status
attribut kategoriseras i mina tre olika alternativ. Det faktum att de ser ut som symboler i en matris är inget misstag – var och en av dessa symboler är faktiskt associerad med dess index. Så in_stock
kommer att refereras av dess indexnummer 0
, out_of_stock
av 1
och ordered
av 2
.
lägg sedan till en kolumn i din migrering som gör att ActiveRecord enum kan utföra dina frågor:
12345 |
|
Jag vill att alla mina Book
objekt ska standard till en in_stock
status när de skapas, så jag lade till en default: 0
i min kolumn. Att lägga till en standard är alltid ett bra sätt att hålla din kod defensiv.
nu om jag vill skapa ett Book
objekt och kontrollera dess status:
1234567891011121314151617 |
|
gå vidare och bläddra upp om du inte tror mig – Jag lovar att jag inte gjorde någon av dessa metoder! Enum gav dem till mig, FO gratis. Så vad händer egentligen här? Tja, inte mycket mer än ActiveRecord som kartlägger heltalet som motsvarar indexen för symbolerna som vi tillhandahöll i enum-makromatrisen.
vår databas har bara en kolumn som lagrar all denna information: status
. Den kolumnen har rader som alla är 1
, 2
eller 3
. ActiveRecord drar de faktiska symboler som motsvarar dessa array index, och returnerar dem, samtidigt skapa en in_stock
, out_of_stock
, och ordered
omfattning. Och glasyren på kakan: alla hjälpmetoder som omedelbart genereras för oss i processen!
Tips och Tricks
Enums ger dig mycket flexibilitet. Till exempel spelade jag runt med in_stock
omfattningen av mitt Book
– objekt för att skapa en specifik klassmetod som skulle beställa de tre senaste böckerna som lagts till i min inventering:
1 |
|
En annan sak att komma ihåg är att du inte kan använda samma namn för olika enums i samma klass:
1234 |
|
definitivt inte göra detta-detta kommer att höja en ActiveRecord fel!
en stor fördel med att använda enums är deras bidrag till din applikations hastighet och prestanda. Det är ett välkänt faktum att det är mycket billigare att lagra data som ett heltal i minnet, snarare än som ett strängvärde. Enums dra nytta av det, men ändå låta dig använda alla ActiveRecord metoder du känner och älskar.
så du kan ha din läsbara och roliga programkod utan att offra någon hastighet och prestanda som du behöver för att spara och få tillgång till din information. Jag antar att drömmar verkligen blir sanna.
tl; dr?
Senaste inläggen
- Om oss-Gandolfo Helin & Fountain Literary Management
- 5 Saker att veta om Shalane Flanagan
- Rolling Stone
- hudtoxicitet
- Sergej Tcherepnin-Artadia
- Hur man hanterar Social Stress och tryck
- vilken hästras är den smartaste?
- kiselsyra (Si(OH)4) är ett signifikant inflytande på atomabsorptionssignalen för aluminium mätt med grafitugn atomabsorptionsspektrometri (GFAAS)
- förklara våra Smarts Del 8-Self Smart
- Sadie T. M. Alexander (1898-1989)
Lämna ett svar