・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina
Folgendes wurde implementiert.
・ Implementierung der Posting-Funktion
Gemfile
#Nachtrag
gem 'ancestry'
Terminal
$ bundle
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
category.rb
#Nachtrag
has_ancestry
has_ancestry
➡︎ Sie können Vorfahren verwenden.
| 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 |
** 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' }])
| 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) |
Implementierung einer mehrschichtigen Kategoriefunktion (Seed Edition)
Recommended Posts