[RUBY] [Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"

Entwicklungsumgebung

・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Annahme

Folgendes wurde implementiert.

Implementierung der Posting-Funktion

Implementierung

1. Stellen Sie Gem vor

Gemfile


#Nachtrag
gem 'ancestry'

Terminal


$ bundle

2. Spalte hinzufügen

Da die Datenmenge ziemlich groß sein wird, werde ich "Index" hinzufügen.

Terminal


$ rails g migration AddAncestryToCategory ancestry:string:index

Terminal


$ rails db:migrate

schema.rb


create_table "categories", force: :cascade do |t|
  t.string "name"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
  t.string "ancestry"
  t.index ["ancestry"], name: "index_categories_on_ancestry"
end

3. Bearbeiten Sie das Modell

category.rb


#Nachtrag
has_ancestry

has_ancestry ➡︎ Sie können Vorfahren verwenden.

Methodenliste

Methodenname Rückgabewert
parent Übergeordneten Datensatz abrufen
parent_id ID des übergeordneten Datensatzes abrufen
root Holen Sie sich die Wurzel des Datensatzes
root_id Holen Sie sich die Root-ID des Datensatzes
root?is_root? Gibt true zurück, wenn der Datensatz root ist
ancestors Gibt den Vorfahren des Datensatzes zurück, beginnend am Stamm und endend beim übergeordneten Datensatz
ancestors? Gibt true zurück, wenn der Datensatz einen Vorfahren hat (nicht den Stammknoten).
ancestor_ids Gibt die ID des Vorfahren des Datensatzes zurück
path Gibt den Pfad des Datensatzes zurück, der bei root beginnt und bei self endet
path_ids Gibt eine Liste von Pfad-IDs zurück, die mit der Root-ID beginnen und mit Ihrer eigenen ID enden
children Kinderdatensatz abrufen
child_ids ID des untergeordneten Datensatzes abrufen
has_parent?ancestors? Gibt true zurück, wenn der Datensatz ein übergeordnetes Element hat
has_children?children? Gibt true zurück, wenn der Datensatz untergeordnete Elemente enthält
is_childless?childless? Gibt true zurück, wenn der Datensatz keine untergeordneten Elemente enthält
siblings Gibt Geschwisterdatensätze zurück (Datensätze in derselben Hierarchie)
sibling_ids Gibt die ID von Geschwisterdatensätzen zurück (Datensätze in derselben Hierarchie)
has_siblings?siblings? Gibt true zurück, wenn der Datensatz mehrere untergeordnete Elemente enthält
is_only_child?only_child? Gibt true zurück, wenn der Datensatz das einzige untergeordnete Element des übergeordneten Elements ist
descendants Kinderrekord, Enkelrekord, Urenkelrekord...Gib es zurück
descendant_ids Kinderrekord, Enkelrekord, Urenkelrekord...Gibt die ID von zurück
indirects Gibt weniger als oder gleich dem Enkelkinddatensatz zurück
indirect_ids Gibt die ID unter dem Enkelkinddatensatz zurück
subtree Gibt ein Modell von Nachkommen und Selbst zurück
subtree_ids Gibt eine Liste von IDs von Teilbäumen von Datensätzen zurück
depth Gibt die Tiefe des Knotens zurück
parent_of?(node) Dieser Rekord(node)Eltern sein von
root_of?(node) Dieser Rekord(node)Zur Wurzel von
ancestor_of?(node) (node)Vorfahren enthalten diesen Datensatz
child_of?(node) (node)Ist das übergeordnete Element des Datensatzes
descendant_of?(node) (node)Ist einer der Vorfahren dieser Aufzeichnung
indirect_of?(node) (node)Ist einer der Vorfahren dieses Datensatzes, aber nicht der Elternteil

Hierarchische Struktur

** Elternteil: Geschäft ** ** Kind: Wirtschaft ** ** Sohn: Japanische Wirtschaft, internationale Wirtschaft **

Wenn die Buchkategorie die oben genannte Eltern-Kind-Beziehung haben soll, erstellen Sie die Daten wie folgt.

python


business = Category.create(name: 'Unternehmen')

business_economy = business.children.create(name: 'Wirtschaft')

business_economy.children.create([{ name: 'Japanische Wirtschaft' }, { name: 'Internationale Wirtschaft' }])

Spaltenstruktur

id name ancestry
1 Unternehmen nil
2 Wirtschaft 1(Eltern ID)
3 Japanische Wirtschaft 1/2(Eltern ID/Kinder-ID)
4 Internationale Wirtschaft 1/2(Eltern ID/Kinder-ID)

Folge

Implementierung einer mehrschichtigen Kategoriefunktion (Seed Edition)

Recommended Posts

[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der "Seed Edition" der Vorfahren
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Edit Form Edition"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Erstellungsformular"
[Rails] Implementierung der Kategoriefunktion
Implementierung der Funktionsfunktion [Rails] gem ancestry category
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Ich habe versucht, ein Fenster mit Bootstrap 3 zu erstellen"
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Implementieren Sie die Produktkategoriefunktion mit Abstammung ① (Vorbereitung)
Implementierung der Kategorie-Pulldown-Funktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung der CSV-Importfunktion
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Implementierung der Bildvorschau
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
[Rails] Implementierung von Viele-zu-Viele-Kategoriefunktionen
[Rails] Implementierung einer neuen Registrierungsfunktion im Assistentenformat mit devise
[Schienen] Kategoriefunktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
[Rails] Implementierung der Couponfunktion (mit automatischer Löschfunktion mittels Stapelverarbeitung)
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
[Rails] Implementierung der Tag-Funktion mit Acts-as-Taggable-On und der Funktion zur Vervollständigung der Tag-Eingabe mit Tag-It
[Ruby on Rails] Implementierung einer ähnlichen Funktion
[Rails] Ich werde die Prozedur zum Implementieren der Follow-Funktion mit form_with erklären.
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
[Rails] Implementierung des PV-Nummernrankings mit Impressionist
[Rails] Implementierung einer Bild-Diashow mit Bootstrap 3
Implementierung der Suchfunktion
Implementierung der Pagenationsfunktion
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)
Verwenden der PAY.JP-API mit Rails ~ Implementierungsvorbereitung ~ (payjp.js v2)
Implementierung der Ajax-Entfernung in Rails
Implementierung der Fuzzy-Suchfunktion für Schienen
Suchfunktion mit [Rails] Ransack
Implementierung der sequentiellen Suchfunktion
Implementierung einer ähnlichen Funktion (Ajax)
Implementierung der Bildvorschau
Implementieren Sie die Kategoriefunktion mithilfe von Vorfahren
[Rails] Implementierung der automatischen Adresseneingabe mit jpostal und jp_prefecture