・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina
Ce qui suit a été mis en œuvre.
・ Mise en œuvre de la fonction de publication
Gemfile
#Postscript
gem 'ancestry'
Terminal
$ bundle
Puisque la quantité de données sera assez grande, je mettrai «index».
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
#Postscript
has_ancestry
has_ancestry
➡︎ Vous pourrez utiliser l'ascendance.
Nom de la méthode | Valeur de retour |
---|---|
parent | Obtenir le dossier parental |
parent_id | Obtenir l'ID de l'enregistrement parent |
root | Obtenez la racine du disque |
root_id | Obtenez l'ID racine de l'enregistrement |
root?is_root? | Renvoie true si l'enregistrement est root |
ancestors | Renvoie l'ancêtre de l'enregistrement, commençant à la racine et se terminant au parent |
ancestors? | Renvoie true si l'enregistrement a un ancêtre (pas le nœud racine) |
ancestor_ids | Renvoie l'ID de l'ancêtre de l'enregistrement |
path | Renvoie le chemin de l'enregistrement, commençant à la racine et se terminant à soi |
path_ids | Renvoie une liste d'ID de chemin commençant par l'ID racine et se terminant par votre propre ID |
children | Obtenir le dossier enfant |
child_ids | Obtenir l'ID de l'enregistrement enfant |
has_parent?ancestors? | Renvoie vrai si l'enregistrement a un parent |
has_children?children? | Renvoie vrai si l'enregistrement a des enfants |
is_childless?childless? | Renvoie vrai si l'enregistrement n'a pas d'enfants |
siblings | Renvoie les enregistrements frères (enregistrements dans la même hiérarchie) |
sibling_ids | Renvoie l'ID des enregistrements frères (enregistrements dans la même hiérarchie) |
has_siblings?siblings? | Renvoie vrai si l'enregistrement a plusieurs enfants |
is_only_child?only_child? | Renvoie true si l'enregistrement est le seul enfant du parent |
descendants | Fiche enfant, fiche petit-fils, fiche arrière-petit-fils...rends le |
descendant_ids | Fiche enfant, fiche petit-fils, fiche arrière-petit-fils...Renvoie l'ID de |
indirects | Renvoie inférieur ou égal à l'enregistrement de petit-enfant |
indirect_ids | Renvoie l'ID sous l'enregistrement du petit-enfant |
subtree | Renvoie un modèle de descendants et de soi |
subtree_ids | Renvoie une liste d'ID de sous-arborescences d'enregistrements |
depth | Renvoie la profondeur du nœud |
parent_of?(node) | Ce record(node)Être le parent de |
root_of?(node) | Ce record(node)À la racine de |
ancestor_of?(node) | (node)Les ancêtres contiennent cet enregistrement |
child_of?(node) | (node)Est le parent du dossier |
descendant_of?(node) | (node)Est l'un des ancêtres de ce record |
indirect_of?(node) | (node)Est l'un des ancêtres de cet enregistrement, mais pas le parent |
** Parent: Entreprise ** ** Enfant: Economy ** ** Fils: économie japonaise, économie internationale **
Si vous souhaitez que la catégorie de livre ait la relation parent-enfant ci-dessus, créez les données comme suit.
python
business = Category.create(name: 'Entreprise')
business_economy = business.children.create(name: 'Économie')
business_economy.children.create([{ name: 'Économie japonaise' }, { name: 'Économie internationale' }])
id | name | ancestry |
---|---|---|
1 | Entreprise | nil |
2 | Économie | 1(Identifiant du parent) |
3 | Économie japonaise | 1/2(Identifiant du parent/ID enfant) |
4 | Économie internationale | 1/2(Identifiant du parent/ID enfant) |
Implémentation de la fonction de catégorie multicouche (édition de base)
Recommended Posts