slova a kód
admin - 14 ledna, 2022NERD ALERT: miluji databáze. Bože, jsou prostě fantastické. Jen málo věcí mi dává tolik radosti jako prázdná tabule a pár složitých spojovacích tabulek, které je třeba načrtnout. Ale je tu také umění pochopit, jak zacházet s daty-zvláště když jich máte hovno.
hlavním problémem, na který se lidé setkávají s daty, je první, jak je ukládat, a za druhé, jak se dostat, když to skutečně potřebujete! To však nezní příliš komplikovaně, že jo? Špatný. Databáze rostou svisle, ne vodorovně, a rostou hella rychle. V určitém okamžiku, způsob, jakým jdete o ukládání dat skončí přímo ovlivňuje, jak jít o načítání to!
mnoho Rubyistů píše různé pomocné metody, aby pro ně provedli dotazování. Ale to je Rails Land, což znamená, že máme k dispozici Black Rails magic. A s příchodem Rails 4.1 má tato magie nyní jméno: enum.
Get Yo Enum Na
Když Kolejnice 4.1 byl propuštěn méně než před rokem, to vyšlo s partou nových funkcí. Jedním z nich byl ActiveRecord enums, který v podstatě vystřihl spoustu metod a nadbytečného kódu.
ActiveRecord enums umožňují manipulovat s atributy objektu ActiveRecord v kolejnicích tak, že hodnoty atributu mapují celá čísla v databázi (na rozdíl od řetězců), a přesto mohou být také dotazovány podle názvu. Pokud vám to všechno zní trochu šíleně, je to proto, že je! Enums jsou docela v pohodě, protože mají flexibilitu řetězce, ale rychlost a účinnost celé číslo. Můžete vyhledat hodnoty v obrovské databázi pomocí celé číslo, ale můžete také aktualizovat a přidat atributy jako řetězec. Oh – získáte také spoustu metod zdarma!
tak jak to kouzlo funguje, přesně? Myslel jsem, že se nikdy nezeptáš!
Více Sloupců?! Na to nikdo nemá čas!
Chcete-li ukázat, jak implementovat ActiveRecord enums, budu i nadále používat minulý týden e-commerce Knihkupectví app jako můj příklad. Takže mám tyto objekty Book
v mém obchodě a chci sledovat, jaký je jejich stav: buď in stock
, out of stock
nebo ordered
. Pro zjednodušení budeme předstírat, že nejsem super sofistikovaný knihkupec, takže nemám mnoho Book
s, a proto každý Book
objekt může mít pouze jeden z těchto tří stavů.
nejprve bych mohl začít tím, že budu mít tři různé sloupce, které budou reprezentovat každý z těchto stavů:
1234567 |
|
ale tohle mi přijde trochu … směšné. Vždycky budu mít dva prázdné sloupce. Tento kód mě má rád:
alternativně bych mohl kombinovat všechny tyto sloupce do jednoho a použít některé pomocné metody, které vracejí booleovské hodnoty, když je volám na instanci a Book
:
12345678910111213 |
|
No, teď mám jeden sloupec, takže je to lepší. Ale to je stále tak opakující se, ošklivý, a neefektivní. Nebojte se, bude to opravdu dobré.
dotaz na vaše malé srdce
implementace enum je velmi jednoduchá. Nejprve přidejte makro do své třídy:
123 |
|
Všimněte si, že mám atribut status
roztříděný do tří různých možností. Skutečnost, že vypadají jako symboly v poli, není chybou – každý z těchto symbolů je ve skutečnosti spojen s jeho indexem. Takže in_stock
bude odkazováno svým indexovým číslem 0
, out_of_stock
1
a ordered
2
.
Dále přidejte do migrace sloupec, který umožní ActiveRecord enum provádět vaše dotazy:
12345 |
|
chci, aby všechny mé Book
objekty byly při vytváření výchozí na stav in_stock
, takže jsem do svého sloupce přidal default: 0
. Přidání výchozího nastavení je vždy dobrý způsob, jak udržet svůj kód defenzivní.
Nyní, pokud chci vytvořit objekt Book
a zkontrolovat jeho stav:
1234567891011121314151617 |
|
jděte do toho a přejděte nahoru, pokud mi nevěříte-slibuji, že jsem žádnou z těchto metod neudělal! Enum mi je dal, fo zdarma. Co se tu vlastně děje? No, ne mnohem víc než ActiveRecord mapující celé číslo odpovídající indexům symbolů, které jsme poskytli v makro poli enum.
naše databáze obsahuje pouze jeden sloupec, který ukládá všechny tyto informace: status
. Tento sloupec obsahuje řádky, které jsou buď 1
, 2
nebo 3
. ActiveRecord vytáhne skutečné symboly, které odpovídají těmto indexům pole, a vrátí je, současně vytváří rozsah in_stock
, out_of_stock
a ordered
. A třešnička na dortu: všechny pomocné metody, které jsou pro nás v procesu okamžitě generovány!
tipy a triky
Enums vám hodně flexibility. Například, hrál jsem si s in_stock
rozsah mého Book
objekt vytvořit konkrétní metodu třídy, která by objednala tři nejlepší nejnovější knihy přidané do mého inventáře:
1 |
|
další věc k zapamatování je, že nemůžete použít stejné názvy pro různé enumy stejné třídy:
1234 |
|
rozhodně to nedělejte – to vyvolá chybu ActiveRecord!
obrovskou výhodou používání ENUM je jejich příspěvek k rychlosti a výkonu vaší aplikace. Je dobře známo, že je mnohem levnější ukládat data jako celé číslo do paměti, spíše než jako hodnotu řetězce. Enums toho využívají, přesto vám umožní používat všechny metody ActiveRecord, které znáte a milujete.
takže můžete mít svůj lidsky čitelný a zábavný programový kód, aniž byste obětovali jakoukoli rychlost a výkon, který potřebujete k uložení a přístupu k vašim informacím. Myslím, že sny se opravdu splní.
tl; dr?
Nejnovější příspěvky
- O nás – Gandolfo Helin & Fountain Literary Management
- 5 Věcí, které byste měli vědět o Shalane Flanagan
- Rolling Stone
- kožní toxicita
- Sergej Tcherepnin-Artadia
- Jak se vyrovnat se sociálním stresem a tlakem
- které plemeno koní je nejchytřejší?
- kyselina křemičitá (Si(OH)4) má významný vliv na atomový absorpční signál hliníku měřený atomovou absorpční spektrometrií grafitové pece (GFAAS)
- vysvětlení našich Smarts Part 8-Self Smart
- Sadie T. M. Alexander (1898-1989)
Napsat komentář