Wörter und Code
admin - Januar 14, 2022NERD ALERT: Ich liebe Datenbanken. Gott, sie sind einfach fantastisch. Nur wenige Dinge bereiten mir so viel Freude wie ein leeres Whiteboard und ein paar komplizierte Join-Tabellen, die skizziert werden müssen. Aber es gibt auch eine Kunst zu verstehen, wie man mit Daten umgeht – besonders wenn man eine Menge davon hat.
Das Hauptproblem, auf das Menschen mit Daten stoßen, ist erstens, wie Sie sie speichern und zweitens, wie Sie sie abrufen, wenn Sie sie tatsächlich benötigen! Das klingt aber nicht super kompliziert, oder? Falsch. Datenbanken wachsen vertikal, nicht horizontal, und sie wachsen hella schnell. An einem bestimmten Punkt wirkt sich die Art und Weise, wie Sie Ihre Daten speichern, direkt darauf aus, wie Sie sie abrufen!
Viele Rubyisten schreiben verschiedene Hilfsmethoden, um ihre Abfragen für sie durchzuführen. Aber das ist Rails Land, was bedeutet, dass wir Black Rails Magic zur Verfügung haben. Und mit dem Aufkommen von Rails 4.1 hat diese Magie jetzt einen Namen: enum .
Holen Sie sich Yo Enum auf
Wenn Rails 4.1 wurde vor weniger als einem Jahr veröffentlicht, es kam mit einer Reihe neuer Funktionen heraus. Eine davon war ActiveRecord Enums , die im Wesentlichen viele Methoden und überflüssigen Code ausschnitten.
Mit ActiveRecord-Enums können Sie die Attribute eines ActiveRecord-Objekts in Rails so bearbeiten, dass die Werte eines Attributs Ganzzahlen in der Datenbank zugeordnet werden (im Gegensatz zu Zeichenfolgen) und dennoch auch nach Namen abgefragt werden können. Wenn dir das alles irgendwie verrückt klingt, dann ist es das! Enums sind ziemlich cool, weil sie die Flexibilität einer Zeichenfolge haben, aber die Geschwindigkeit und Effizienz einer Ganzzahl. Sie können Werte in einer großen Datenbank mit einer Ganzzahl nachschlagen, aber Sie können auch Attribute als Zeichenfolge aktualisieren und hinzufügen. Oh – Sie erhalten auch eine Reihe von Methoden KOSTENLOS!
Wie funktioniert diese Magie genau? Ich dachte, du würdest nie fragen!
Mehrere Spalten?! Dafür hat keiner Zeit!
Um zu demonstrieren, wie ActiveRecord-Enums implementiert werden, verwende ich weiterhin die E-Commerce-Buchladen-App der letzten Woche als Beispiel. Ich habe also diese Book
-Objekte in meinem Speicher und möchte ihren Status verfolgen: entweder in stock
, out of stock
oder ordered
. Der Einfachheit halber werden wir so tun, als wäre ich kein hoch entwickelter Buchhändler, daher habe ich nicht viele Book
s, und daher kann jedes Book
Objekt immer nur einen dieser drei Zustände haben.
Ich könnte zunächst mit drei verschiedenen Spalten beginnen, um jeden dieser Zustände darzustellen:
1234567 |
|
Aber das scheint irgendwie … lächerlich. Ich werde immer zwei leere Spalten haben. Dieser Code hat mich alle wie:
Alternativ könnte ich alle diese Spalten zu einer kombinieren und einige Hilfsmethoden verwenden, die boolesche Werte zurückgeben, wenn ich sie in einer Instanz von a aufrufe Book
:
12345678910111213 |
|
Nun, jetzt habe ich eine Spalte, also ist das besser. Aber das ist immer noch so repetitiv, hässlich und ineffizient. Keine Sorge, es wird bald richtig gut.
Fragen Sie Ihr kleines Herz ab
Die Implementierung von Enum ist ziemlich einfach. Fügen Sie zuerst das Makro zu Ihrer Klasse hinzu:
123 |
|
Sie werden feststellen, dass ich mein Attribut status
in meine drei verschiedenen Optionen eingeteilt habe. Die Tatsache, dass sie wie Symbole in einem Array aussehen, ist kein Fehler – jedes dieser Symbole ist tatsächlich seinem Index zugeordnet. Also wird in_stock
durch seine Indexnummer 0
, out_of_stock
durch 1
und ordered
durch 2
referenziert.
Fügen Sie als Nächstes Ihrer Migration eine Spalte hinzu, in der ActiveRecord enum Ihre Abfragen ausführen kann:
12345 |
|
Ich möchte, dass alle meine Book
-Objekte beim Erstellen standardmäßig den Status in_stock
haben, daher habe ich meiner Spalte einen default: 0
hinzugefügt. Das Hinzufügen eines Standardwerts ist immer eine gute Möglichkeit, Ihren Code defensiv zu halten.
Wenn ich nun ein Book
-Objekt erstellen und dessen Status überprüfen möchte:
1234567891011121314151617 |
|
Scrollen Sie nach oben, wenn Sie mir nicht glauben – ich verspreche, ich habe keine dieser Methoden entwickelt! Enum gab sie mir, FO KOSTENLOS. Also, was ist eigentlich hier los? Nun, nicht viel mehr als ActiveRecord, das die Ganzzahl zuordnet, die den Indizes der Symbole entspricht, die wir im Enum-Makroarray bereitgestellt haben.
Unsere Datenbank enthält nur eine Spalte, in der alle diese Informationen gespeichert sind: status
. Diese Spalte enthält Zeilen, die alle entweder 1
, 2
oder 3
sind. ActiveRecord ruft die tatsächlichen Symbole ab, die diesen Array-Indizes entsprechen, und gibt sie zurück, wobei gleichzeitig ein Bereich in_stock
, out_of_stock
und ordered
erstellt wird. Und das Sahnehäubchen auf dem Kuchen: alle Hilfsmethoden, die dabei sofort für uns generiert werden!
Tipps und Tricks
Enums geben Ihnen viel Flexibilität. Zum Beispiel habe ich mit dem in_stock
-Bereich meines Book
-Objekts herumgespielt, um eine bestimmte Klassenmethode zu erstellen, mit der die drei neuesten Bücher bestellt werden, die meinem Inventar hinzugefügt wurden:
1 |
|
Eine andere Sache, an die Sie sich erinnern sollten, ist, dass Sie nicht dieselben Namen für verschiedene Aufzählungen derselben Klasse verwenden können:
1234 |
|
Tun Sie dies auf keinen Fall – dies löst einen ActiveRecord-Fehler aus!
Ein großer Vorteil bei der Verwendung von Enums ist ihr Beitrag zur Geschwindigkeit und Leistung Ihrer Anwendung. Es ist eine bekannte Tatsache, dass es viel billiger ist, Daten als Ganzzahl im Speicher und nicht als Zeichenfolgenwert zu speichern. Aufzählungen nutzen dies aus, ermöglichen es Ihnen jedoch, alle ActiveRecord-Methoden zu verwenden, die Sie kennen und lieben.
So können Sie Ihren für Menschen lesbaren und unterhaltsam zu programmierenden Code haben, ohne die Geschwindigkeit und Leistung zu beeinträchtigen, die Sie zum Speichern und Zugreifen auf Ihre Informationen benötigen. Ich denke, Träume werden wirklich wahr.
tl;dr?
Neueste Beiträge
- Über uns – Gandolfo Helin & Fountain Literary Management
- 5 Wissenswertes über Shalane Flanagan
- Rolling Stone
- Hauttoxizität
- Sergei Tcherepnin – Artadia
- Wie man mit sozialem Stress und Druck umgeht
- Welche Pferderasse ist die klügste?
- Kieselsäure (Si (OH)4) hat einen signifikanten Einfluss auf das Atomabsorptionssignal von Aluminium, gemessen mit der Graphitofen-Atomabsorptionsspektrometrie (GFAAS)
- Explaining Our Smarts Part 8 – Self Smart
- Sadie T. M. Alexander (1898-1989)
Schreibe einen Kommentar