[RubyOnRails] Pour quel type de données active_hash doit-il être utilisé?

introduction

Lors du développement d'applications avec Rails, essayer d'implémenter des formulaires inter-niveaux qui peuvent exister dans le monde réel dans une certaine mesure conduira inévitablement à l'existence de active_hash.

J'y suis aussi arrivé et j'ai pensé que c'était "pratique", mais au fur et à mesure que je procédais à divers travaux, la façon de penser quand il devrait être utilisé et quand il ne devrait pas être décidé petit à petit, je vais donc le laisser pour rappel. ..

environnement

Nous le faisons dans l'environnement suivant.

ruby 2.6.5 rails 6.0.3

Données qui devraient utiliser active_hash

De la conclusion, je me demande si la façon de penser suivante est correcte. ** ① À utiliser pour les données moins importantes ** ** ② Utilisé pour les données statiques ** ** ③ Utilisé pour les données qui n'ont pas une structure compliquée **

Dès la conclusion, il est écrit partout avec le sentiment que ce sont les deux ci-dessus, mais je n'étais pas au courant de (2) ou je n'ai pas pensé à (3) en premier lieu, j'ai donc appris en procédant au développement. C'est une forme qui a disparu. Les détails seront décrits plus tard.

Qu'est-ce que active_hash en premier lieu?

Cet article et Cet article sont très faciles à comprendre. Grâce à vous, j'ai pu le présenter sans trop de problèmes. (Toujours, mes ancêtres ne s'énervent pas)

En utilisant gem active_hash, vous pouvez créer des données statiques qui peuvent être utilisées comme un enregistrement actif sans créer de table. (À propos, la dernière version de gem a moins de méthodes de description autorisées, alors soyez prudent lorsque vous l'introduisez.)

Les données préfectorales sont souvent utilisées à titre d'exemple. La description réelle est la suivante.

prefecture.rb


class Prefecture < ActiveHash::Base
  self.data = [
      {id: 1, name: 'Hokkaido'}, {id: 2, name: 'Préfecture d'Aomori'}, {id: 3, name: 'Préfecture d'Iwate'},
      {id: 4, name: 'Préfecture de Miyagi'}, {id: 5, name: 'Akita'}, {id: 6, name: 'Préfecture de Yamagata'},
      {id: 7, name: 'Préfecture de Fukushima'}, {id: 8, name: 'Préfecture d'Ibaraki'}, {id: 9, name: 'Préfecture de Tochigi'},
      {id: 10, name: 'Préfecture de Gunma'}, {id: 11, name: 'Saitama'}, {id: 12, name: 'Préfecture de Chiba'},
      {id: 13, name: 'Tokyo'}, {id: 14, name: 'Préfecture de Kanagawa'}, {id: 15, name: 'Préfecture de Niigata'},
      {id: 16, name: 'Préfecture de Toyama'}, {id: 17, name: 'Préfecture d'Ishikawa'}, {id: 18, name: 'Préfecture de Fukui'},
      {id: 19, name: 'Préfecture de Yamanashi'}, {id: 20, name: 'Préfecture de Nagano'}, {id: 21, name: 'Préfecture de Gifu'},
      {id: 22, name: 'Préfecture de Shizuoka'}, {id: 23, name: 'Préfecture d'Aichi'}, {id: 24, name: 'Préfecture de Mie'},
      {id: 25, name: 'Préfecture de Shiga'}, {id: 26, name: 'Kyoto'}, {id: 27, name: 'Préfecture d'Osaka'},
      {id: 28, name: 'Préfecture de Hyogo'}, {id: 29, name: 'Préfecture de Nara'}, {id: 30, name: 'Préfecture de Wakayama'},
      {id: 31, name: 'Préfecture de Tottori'}, {id: 32, name: 'Préfecture de Shimane'}, {id: 33, name: 'Préfecture d'Okayama'},
      {id: 34, name: 'Préfecture d'Hiroshima'}, {id: 35, name: 'Préfecture de Yamaguchi'}, {id: 36, name: 'Préfecture de Tokushima'},
      {id: 37, name: 'Préfecture de Kagawa'}, {id: 38, name: 'Préfecture d'Ehime'}, {id: 39, name: 'Préfecture de Kochi'},
      {id: 40, name: 'Préfecture de Fukuoka'}, {id: 41, name: 'Préfecture de Saga'}, {id: 42, name: 'Préfecture de Nagasaki'},
      {id: 43, name: 'Préfecture de Kumamoto'}, {id: 44, name: 'Préfecture d'Oita'}, {id: 45, name: 'Préfecture de Miyazaki'},
      {id: 46, name: 'Préfecture de Kagoshima'}, {id: 47, name: 'Préfecture d'Okinawa'}
  ]
end

Créez simplement un fichier comme celui-ci dans le modèle. Très simple. id: et nom: sont les noms des colonnes du tableau. Après cela, vous pouvez facilement l'utiliser en écrivant simplement l'association dans la description de active_hash.

item.rb


class Item < ApplicationRecord
  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :prefecture
end

Cette fois, je voulais avoir un prefecture_id dans la table des éléments, je vais donc le décrire dans le modèle comme ci-dessus. Il n'est pas nécessaire de décrire l'association du côté du hachage actif. Vous pouvez maintenant l'utiliser de la même manière que si vous aviez créé un tableau. Facile et pratique.

Que sont les données statiques ou les données non complexes?

Données statiques

Quand j'ai appris qu'il s'agissait de données statiques, j'étais au départ au courant des ** données préparées côté serveur ** sans augmenter le côté client.

Cependant, en avançant, j'ai pensé que cette reconnaissance était insuffisante. Plus précisément, même si les données sont préparées côté serveur, si elles augmentent régulièrement en raison de changements d'utilisation ou de changement de valeur plus tard ** On ne peut pas dire qu'elle est statique. ,Quand**

Comme vous pouvez le voir à partir de la méthode d'écriture ci-dessus, chaque valeur du hachage actif est solide dans le fichier, donc la mise à jour est ennuyeuse et risquée (travail analogique).

Dans cet esprit, j'ai enfin compris la raison pour laquelle les préfectures apparaissent dans les exemples d'utilisation de active_hash. Le nombre de préfectures n'augmente pas en raison de la commodité du côté client ou du côté serveur.

Données complexes

Une section m'est venue à l'esprit lorsque j'ai appris cela pour la première fois. Je voulais avoir une association plusieurs-à-plusieurs, mais c'était difficile avec le hachage actif, donc c'était une reconnaissance qui n'était pas une erreur.

De plus, il semble que le hachage actif ne puisse pas être utilisé car les ** tables avec une structure hiérarchique ** sont également compliquées. Il y avait un manque de reconnaissance.

À la fin

Au fur et à mesure que je procédais au développement, j'ai eu l'impression que le sens du mot «données statiques» ne pouvait pas être saisi avec précision. Après tout, vous ne pouvez pas comprendre tant que vous n’avez pas essayé les bases. Je n'ai qu'à bouger ma main.

Recommended Posts

[RubyOnRails] Pour quel type de données active_hash doit-il être utilisé?
Utilisez le modèle de repos Gekitsuyo pour la communication REST
[Rails] Préparez les données factices à utiliser pour les tests [Faker]
[Ruby] À quoi sert «!!»?
Quel genre de StringUtil est bon
Quel type de méthode est define_method?
Map keySet, les valeurs ne doivent pas être utilisées
Quelle est la structure des données d'ActionText?
5 choses dont les nouveaux programmeurs devraient être conscients