[RubyOnRails] Für welche Art von Daten sollte active_hash verwendet werden?

Einführung

Bei der Entwicklung von Anwendungen mit Rails führt der Versuch, Interlevel-Formulare zu implementieren, die in der realen Welt zu einem gewissen Grad existieren können, zwangsläufig zur Existenz von active_hash.

Ich kam auch dazu und dachte, dass es "bequem" sei, aber als ich mit verschiedenen Arbeiten fortfuhr, überlegte ich, wann es verwendet werden sollte und wann es nicht nach und nach entschieden werden sollte, also werde ich es als Erinnerung belassen ..

Umgebung

Wir machen das in der folgenden Umgebung.

ruby 2.6.5 rails 6.0.3

Daten, die active_hash verwenden sollen

Abschließend frage ich mich, ob die folgende Denkweise in Ordnung ist. ** ① Für weniger wichtige Daten verwenden ** ** ② Wird für statische Daten verwendet ** ** ③ Wird für Daten verwendet, die keine komplizierte Struktur haben **

Aus der Schlussfolgerung geht hervor, dass es überall mit dem Gefühl geschrieben ist, dass es die beiden oben genannten sind, aber ich war mir (2) nicht bewusst oder dachte überhaupt nicht an (3), also lernte ich, während ich mit der Entwicklung fortfuhr. Es ist eine Form, die gegangen ist. Details werden später beschrieben.

Was ist überhaupt active_hash?

Dieser Artikel und Dieser Artikel sind sehr einfach zu verstehen. Dank dir konnte ich es ohne große Probleme einführen. (Meine Vorfahren sind immer nicht verärgert)

Mit gem active_hash können Sie statische Daten erstellen, die wie ein aktiver Datensatz verwendet werden können, ohne eine Tabelle zu erstellen. (Übrigens hat die neueste Version von gem weniger zulässige Beschreibungsmethoden, seien Sie also vorsichtig, wenn Sie sie einführen.)

Präfekturdaten werden häufig als Beispiel verwendet. Die tatsächliche Beschreibung lautet wie folgt.

prefecture.rb


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

Erstellen Sie einfach eine solche Datei im Modell. Sehr einfach. id: und name: sind die Spaltennamen in der Tabelle. Danach können Sie es einfach verwenden, indem Sie die Zuordnung in die Beschreibung für active_hash schreiben.

item.rb


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

Dieses Mal wollte ich prefecture_id in der Artikeltabelle haben, daher werde ich es im Modell wie oben beschreiben. Es ist nicht erforderlich, die Zuordnung auf der aktiven Hash-Seite zu beschreiben. Jetzt können Sie es genauso verwenden, als hätten Sie eine Tabelle erstellt. Einfach und bequem.

Was sind statische oder nicht komplexe Daten?

Statische Daten

Als ich hörte, dass es sich um statische Daten handelte, waren mir zunächst die auf der Serverseite vorbereiteten Daten bekannt, ohne die Clientseite zu vergrößern.

Als ich fortfuhr, dachte ich jedoch, dass diese Anerkennung unzureichend war. Selbst wenn die Daten auf der Serverseite vorbereitet werden, steigen sie aufgrund von Nutzungsänderungen oder späteren Wertänderungen stetig an. ** Es kann nicht gesagt werden, dass sie statisch sind. ,Wann**

Wie Sie der obigen Schreibmethode entnehmen können, ist jeder Wert des aktiven Hashs in der Datei fest, sodass das Aktualisieren ärgerlich und riskant ist (analoge Arbeit).

In diesem Sinne habe ich endlich verstanden, warum Präfekturen in den Verwendungsbeispielen von active_hash vorkommen. Die Anzahl der Präfekturen nimmt aufgrund der Bequemlichkeit der Client- oder Serverseite nicht zu.

Komplexe Daten

Es gab einen Abschnitt, der mir in den Sinn kam, als ich zum ersten Mal davon erfuhr. Ich wollte eine Viele-zu-Viele-Assoziation haben, aber es war schwierig mit aktivem Hashing, also dachte ich, dass es kein Fehler war.

Es scheint auch, dass aktiver Hash nicht verwendet werden kann, da ** Tabellen mit einer hierarchischen Struktur ** ebenfalls kompliziert sind. Es mangelte an Anerkennung.

Am Ende

Als ich mit der Entwicklung fortfuhr, hatte ich den Eindruck, dass die Bedeutung des Wortes "statische Daten" nicht genau erfasst werden konnte. Schließlich können Sie nicht verstehen, bis Sie die Grundlagen ausprobieren. Ich muss nur meine Hand bewegen.

Recommended Posts

[RubyOnRails] Für welche Art von Daten sollte active_hash verwendet werden?
Gekitsuyo Rest Template sollte für die REST-Kommunikation verwendet werden
[Rails] Bereiten Sie Dummy-Daten vor, die zum Testen von [Faker] verwendet werden sollen.
[Ruby] Wofür wird `!!` verwendet?
Was für ein StringUtil ist gut?
Was für eine Methode ist define_method?
Map keySet, Werte sollten nicht verwendet werden
Wie ist die Datenstruktur von ActionText?
5 Dinge, die neue Programmierer beachten sollten