・ 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