[RUBY] [Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"

Environnement de développement

・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina

supposition

Ce qui suit a été mis en œuvre.

Mise en œuvre de la fonction de publication

la mise en oeuvre

1. Présentez Gem

Gemfile


#Postscript
gem 'ancestry'

Terminal


$ bundle

2. Ajouter une colonne

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

3. Modifiez le modèle

category.rb


#Postscript
has_ancestry

has_ancestry ➡︎ Vous pourrez utiliser l'ascendance.

Liste des méthodes

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

Structure hiérarchique

** 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' }])

Structure de la colonne

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)

Suite

Implémentation de la fonction de catégorie multicouche (édition de base)

Recommended Posts

[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Edit Form Edition"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
[Rails] Implémentation de la fonction de catégorie
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "J'ai essayé de créer une fenêtre avec Bootstrap 3"
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
Mettre en œuvre la fonction de catégorie de produit en utilisant l'ascendance ① (Préparation)
Mise en œuvre de la fonction déroulante de catégorie
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
[Rails] Implémentation de fonctions de catégorie plusieurs à plusieurs
[Rails] Implémentation d'une nouvelle fonction d'enregistrement au format assistant à l'aide de devise
[Rails] Fonction de catégorie
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
[Rails] Implémentation de la fonction de balise à l'aide de la fonction agit-as-taggable-on et de la fonction de complétion d'entrée de balise à l'aide de tag-it
[Ruby on rails] Implémentation d'une fonction similaire
[Rails] Je vais expliquer la procédure d'implémentation de la fonction follow en utilisant form_with.
Implémentation de la fonction de connexion Ruby on Rails (Session)
[Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste
[Rails] Implémentation du diaporama d'images à l'aide de Bootstrap 3
Implémentation de la fonction de recherche
Mise en œuvre de la fonction de pagénation
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
Utilisation de l'API PAY.JP avec Rails ~ Préparation de l'implémentation ~ (payjp.js v2)
Implémentation de la suppression d'ajax dans Rails
Implémentation de la fonction de recherche floue Rails
Fonction de recherche à l'aide de [rails] ransack
Implémentation de la fonction de recherche séquentielle
Implémentation d'une fonction similaire (Ajax)
Implémentation de la fonction de prévisualisation d'image
Implémenter la fonction de catégorie en utilisant l'ancêtre
[Rails] Implémentation de la saisie d'adresse automatique avec jpostal et jp_prefecture