Mots et Code
admin - janvier 14, 2022ALERTE NERD: J’adore les bases de données. Ils sont tout simplement fantastiques. Peu de choses me donnent autant de joie qu’un tableau blanc vide et quelques tables de jointure complexes qui doivent être esquissées. Mais il y a aussi un art de comprendre comment gérer les données, en particulier lorsque vous en avez une tonne de merde.
Le principal problème que les gens rencontrent avec les données est d’abord de savoir comment les stocker et, deuxièmement, comment les obtenir lorsque vous en avez réellement besoin! Cela ne semble pas super compliqué, non? Faux. Les bases de données se développent verticalement, pas horizontalement, et elles se développent rapidement. À un certain moment, la façon dont vous stockez vos données finit par avoir un impact direct sur la façon dont vous les récupérez!
De nombreux Rubyistes écrivent différentes méthodes d’assistance pour effectuer leurs requêtes. Mais c’est Rails Land, ce qui signifie que nous avons la magie des rails noirs à notre disposition. Et avec l’avènement de Rails 4.1, cette magie a maintenant un nom: enum.
Obtenez Yo Enum Sur
Lorsque Rails 4.1 est sorti il y a moins d’un an, il est sorti avec un tas de nouvelles fonctionnalités. L’un d’eux était ActiveRecord enums, qui éliminait essentiellement beaucoup de méthodes et de code superflu.
Les énumérations ActiveRecord vous permettent de manipuler les attributs d’un objet ActiveRecord dans des Rails de telle sorte que les valeurs d’un attribut correspondent à des entiers dans la base de données (par opposition aux chaînes), et peuvent également être interrogées par nom. Si tout cela vous semble un peu fou, c’est parce que c’est le cas! Les énumérations sont plutôt cool car elles ont la flexibilité d’une chaîne, mais la vitesse et l’efficacité d’un entier. Vous pouvez rechercher des valeurs dans une énorme base de données à l’aide d’un entier, mais vous pouvez également mettre à jour et ajouter des attributs sous forme de chaîne. Oh – vous obtenez également un tas de méthodes GRATUITEMENT!
Alors, comment fonctionne cette magie, exactement? Je pensais que tu ne demanderais jamais!
Plusieurs colonnes ?! Personne N’A Le Temps Pour Ça !
Pour démontrer comment implémenter ActiveRecord enums, je continuerai à utiliser l’application de librairie de commerce électronique de la semaine dernière comme exemple. J’ai donc ces objets Book
dans mon magasin et je veux garder une trace de leur statut: soit in stock
, out of stock
, ou ordered
. Par souci de simplicité, nous prétendrons que je ne suis pas un libraire super sophistiqué, donc je n’ai pas beaucoup de Book
s, et donc chaque objet Book
ne peut avoir qu’un seul de ces trois états.
Je pourrais d’abord commencer par avoir trois colonnes différentes pour représenter chacun de ces états:
1234567 |
|
Mais cela semble un peuridiculous ridicule. J’aurai toujours deux colonnes vides. Ce code m’a tout comme:
Alternativement, je pourrais combiner toutes ces colonnes en une seule et utiliser des méthodes d’assistance qui renvoient des valeurs booléennes lorsque je les appelle sur une instance de a Book
:
12345678910111213 |
|
Eh bien, maintenant j’ai une colonne, donc c’est mieux. Mais c’est toujours aussi répétitif, laid et inefficace. Ne t’inquiète pas, ça va bien aller.
Interrogez Votre Petit cœur
La mise en œuvre d’enum est assez simple. Tout d’abord, ajoutez la macro à votre classe:
123 |
|
Vous remarquerez que mon attribut status
est classé dans mes trois options différentes. Le fait qu’ils ressemblent à des symboles dans un tableau n’est pas une erreur – chacun de ces symboles est en fait associé à son index. Ainsi, in_stock
sera référencé par son numéro d’index 0
, out_of_stock
par 1
et ordered
par 2
.
Ensuite, ajoutez une colonne à votre migration qui permettra à ActiveRecord enum d’exécuter vos requêtes:
12345 |
|
Je veux que tous mes objets Book
aient un statut in_stock
par défaut lorsqu’ils sont créés, j’ai donc ajouté un default: 0
à ma colonne. L’ajout d’une valeur par défaut est toujours un bon moyen de garder votre code défensif.
Maintenant, si je veux créer un objet Book
et vérifier son état:
1234567891011121314151617 |
|
Allez-y et faites défiler vers le haut si vous ne me croyez pas – je promets que je n’ai fait aucune de ces méthodes! Enum me les a donnés, LIBRES. Alors que se passe-t-il réellement ici? Eh bien, pas beaucoup plus qu’ActiveRecord mappant l’entier correspondant aux index des symboles que nous avons fournis dans le tableau de macro enum.
Notre base de données n’a qu’une seule colonne stockant toutes ces informations : status
. Cette colonne a des lignes qui sont toutes 1
, 2
ou 3
. ActiveRecord extrait les symboles réels qui correspondent à ces index de tableau et les renvoie, créant simultanément une portée in_stock
, out_of_stock
et ordered
. Et la cerise sur le gâteau: toutes les méthodes d’assistance qui sont immédiatement générées pour nous dans le processus!
Trucs et astuces
Les énumérations vous offrent beaucoup de flexibilité. Par exemple, j’ai joué avec la portée in_stock
de mon objet Book
pour créer une méthode de classe spécifique qui commanderait les trois livres les plus récents ajoutés à mon inventaire:
1 |
|
Une autre chose à retenir est que vous ne pouvez pas utiliser les mêmes noms pour différentes énumérations de la même classe:
1234 |
|
Ne faites certainement pas cela – cela provoquera une erreur ActiveRecord!
Un énorme avantage de l’utilisation des énumérations est leur contribution à la vitesse et aux performances de votre application. C’est un fait bien connu qu’il est beaucoup moins coûteux de stocker des données sous forme d’entier en mémoire, plutôt que sous forme de valeur de chaîne. Les énumérations en profitent, tout en vous permettant d’utiliser toutes les méthodes ActiveRecord que vous connaissez et aimez.
Ainsi, vous pouvez avoir votre code lisible par l’homme et amusant à programmer sans sacrifier la vitesse et les performances dont vous avez besoin pour enregistrer et accéder à vos informations. Je suppose que les rêves se réalisent vraiment.
tl; dr?
Articles récents
- À propos de nous – Gandolfo Helin & Fountain Literary Management
- 5 Choses à savoir Sur Shalane Flanagan
- Rolling Stone
- Toxicité cutanée
- Sergei Tcherepnine – Artadia
- Comment faire Face au Stress social et à la pression
- Quelle Race De Cheval Est La Plus Intelligente?
- L’acide silicique (Si (OH)4) est une influence significative sur le signal d’absorption atomique de l’aluminium mesuré par spectrométrie d’absorption atomique au four à graphite (GFAAS)
- Expliquer Notre intelligence Partie 8 – Auto Smart
- Sadie T. M. Alexander (1898-1989)
Laisser un commentaire