Ord og Kode
admin - januar 14, 2022NERD ALERT: jeg elsker databaser. Gud, de er bare fantastiske. Få ting gir meg så mye glede som en tom tavle og et par intrikate sammenføyningstabeller som må skisseres ut. Men det er også en kunst å forstå hvordan man håndterer data-spesielt når du har en dritt massevis av det.
hovedproblemet folk støter på med data, er først, hvordan du skal lagre det, og for det andre, hvordan du skal få det når du faktisk trenger det! Dette høres ikke super komplisert skjønt, ikke sant? Feil. Databaser vokser vertikalt, ikke horisontalt, og de vokser hella raskt. På et visst punkt, måten du går om lagring av data ender opp direkte påvirker hvordan du går om å hente den!
mange Rubyister skriver forskjellige hjelpemetoder for å spørre etter dem. Men Dette Er Rails Land, noe som betyr at vi har svart Rails magi til rådighet. Og med adventen Av Rails 4.1, har den magien nå et navn: enum.
Få Yo Enum På
Når Skinner 4.1 ble utgitt mindre enn et år siden, det kom ut med en rekke nye funksjoner. En av dem var ActiveRecord enums, som i hovedsak kuttet ut mange metoder og overflødig kode.
ActiveRecord enums lar deg manipulere attributtene til Et ActiveRecord-objekt i Rails slik at attributtets verdier tilordnes heltall i databasen (i motsetning til strenger), og likevel kan også spørres etter navn. Hvis alt dette høres litt gal ut for deg, er det fordi det er! Enums er ganske kule fordi de har fleksibiliteten til en streng, men hastigheten og effektiviteten til et heltall. Du kan slå opp verdier i en stor database ved hjelp av et heltall, men du kan også oppdatere og legge til attributter som streng. Oh – du får også en haug med metoder GRATIS!
så hvordan fungerer denne magien, akkurat? Jeg trodde du aldri ville spørre!
Flere Kolonner?! Ingen Har Tid til Det!
for å demonstrere hvordan du implementerer ActiveRecord enums, vil jeg fortsette å bruke forrige ukes e-handel bokhandel app som mitt eksempel. Så, jeg har disse Book
objektene i butikken min, og jeg vil holde oversikt over hva deres status er: enten in stock
, out of stock
eller ordered
. For enkelhets skyld vil vi late som om jeg ikke er en super sofistikert bokhandler, så jeg har ikke mye Book
s, og derfor kan hver Book
objekt bare ha en av disse tre statene.
jeg kan først starte med å ha tre forskjellige kolonner for å representere hver av disse statene:
1234567 |
|
Men dette virker litt … latterlig. Jeg kommer alltid til å ha to tomme kolonner. Denne koden har meg alle som:
Alternativt kan jeg kombinere alle disse kolonnene i en og bruke noen hjelpemetoder som returnerer boolske verdier når jeg ringer dem på en forekomst av en Book
:
12345678910111213 |
|
vel, nå har jeg en kolonne, så det er bedre. Men dette er fortsatt så repeterende, stygg og ineffektiv. Ikke bekymre deg, det er i ferd med å bli virkelig bra.
Spør Ditt Lille Hjerte Ut
Implementering av enum er ganske enkelt. Først legger du til makroen i klassen din:
123 |
|
Du vil legge merke til at jeg har min status
attributt kategorisert i mine tre forskjellige alternativer. Det faktum at de ser ut som symboler i en matrise, er ingen feil-hver av disse symbolene er faktisk knyttet til indeksen. Så in_stock
vil bli referert av indeksnummeret 0
, out_of_stock
av 1
og ordered
av 2
.
Legg Deretter til en kolonne i overføringen som gjør At ActiveRecord enum kan utføre spørringene dine:
12345 |
|
jeg vil at alle mine Book
objekter skal standard til en in_stock
status når de er opprettet, så jeg la til en default: 0
til kolonnen min. Legge til en standard er alltid en god måte å holde koden defensiv.
nå hvis jeg vil lage et Book
objekt og sjekke statusen:
1234567891011121314151617 |
|
Gå videre og bla opp hvis du ikke tror meg-jeg lover at jeg ikke gjorde noen av disse metodene! Enum ga dem til MEG, FO GRATIS. Så hva skjer egentlig her? Vel, ikke mye mer Enn ActiveRecord kartlegger heltallet som svarer til indeksene til symbolene vi oppgav i enum makro array.
vår database har bare en kolonne som lagrer all denne informasjonen: status
. Den kolonnen har rader som alle er enten 1
, 2
eller 3
. ActiveRecord trekker de faktiske symbolene som samsvarer med disse matriseindeksene, og returnerer dem samtidig som de oppretter et omfang in_stock
, out_of_stock
og ordered
. Og glasur på kaken: alle hjelpemetoder som umiddelbart genereres for oss i prosessen!
Tips Og Triks
Enums gir deg mye fleksibilitet. For eksempel spilte jeg rundt med in_stock
omfanget av objektet mitt Book
for å lage en bestemt klassemetode som ville bestille de tre nyeste bøkene som ble lagt til i lageret mitt:
1 |
|
En annen ting å huske er at du ikke kan bruke de samme navnene for forskjellige enums av samme klasse:
1234 |
|
Definitivt ikke gjør dette – dette vil øke En ActiveRecord feil!
en stor oppside for å bruke enums er deres bidrag til programmets hastighet og ytelse. Det er et velkjent faktum at det er mye billigere å lagre data som et heltall i minnet, i stedet for som en strengverdi. Enums dra nytte av det, men lar deg bruke alle ActiveRecord-metodene du kjenner og elsker.
så, du kan ha din lesbar og morsom å programkode uten å ofre noen av hastigheten og ytelsen som du trenger for å lagre og få tilgang til informasjon. Jeg tror drømmer virkelig går i oppfyllelse.
tl; dr?
Siste innlegg
- Om Oss-Gandolfo Helin & Fountain Literary Management
- 5 Ting Å Vite Om Shalane Flanagan
- Rolling Stone
- Hudtoksisitet
- Sergei Tcherepnin-Artadia
- Hvordan Takle Sosialt Stress Og Press
- Hvilken Hest Rase Er Den Smarteste?
- Kiselsyre (SI(OH)4) er en betydelig innflytelse på atomabsorpsjonssignalet av aluminium målt ved grafittovn atomabsorpsjonsspektrometri (gfaas)
- Explaining Our Smarts Part 8 – Self Smart
- Sadie T. M. Alexander (1898-1989)
Legg igjen en kommentar