・ 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