2013-10-13 3 views
2

C'est la première fois que je modélise une hiérarchie dans le même modèle (catégories de produits). J'ai trouvé post sur ce sujet. Depuis que j'utilise Rails 4 & Postgres, qui selon l'article supporte l'interrogation récursive (c'est la première fois que j'entends ce terme), la "liste d'adjacence avec requête récursive" semble être la voie à suivre car elle est facile à modéliser et rapide à interroger.Rails: acts_as_tree et acts_as_sane_tree

L'article suggère la gem acts_as_sane_tree qui prend en charge l'interrogation récursive. Ce repo n'a pas été mis à jour depuis deux ans et je ne suis pas sûr qu'il supporte Rails 4. Le projet est une fourche de la gemme acts_as_tree, qui prend en charge Rails 4 et est bien entretenu.

Quelle gemme dois-je utiliser? Et le gem acts_as_tree prend-il en charge l'interrogation récursive pour éviter les requêtes coûteuses?

Répondre

2

Si vous êtes dans le doute quelle gemme à utiliser, je suggère toujours de jeter un oeil à the Ruby Toolbox. Cela aide à évaluer si un projet de gemme est encore actif, combien de développeur utilise cette gemme et beaucoup plus. Pourquoi savez-vous faire cela? Ne veux pas choisir une gemme qui n'est plus maintenue. Vous voulez utiliser les outils que la communauté utilise et rester aussi proche du courant dominant. Si vous ne suivez pas la communauté, vous rencontrerez des problèmes si vous avez besoin d'un correctif, d'une documentation supplémentaire ou si vous souhaitez mettre à jour votre version de Rails.

Dans ce cas, for nested ActiveRecord awesome_nested_set et l'ascendance sont de bons candidats. Je ne choisirais pas l'implémentation de la requête récursive, car la plupart des bases de données ne la prennent pas en charge. Sauf si vous avez une très bonne raison, il ne vaut pas la peine de lier votre application à un système de gestion de base de données spécifique.

1

envisagez-vous l'ascendance gem? "Il expose toutes les relations de structure arborescente standard (ancêtres, parent, racine, enfants, frères et sœurs, descendants) et toutes peuvent être récupérées dans une seule requête SQL."

+0

Merci pour votre réponse. D'après ce que j'ai lu, la liste d'adjacence avec requête récursive présente quelques avantages par rapport à l'énumération des chemins (Ancestry gem): 1. Intégrité référentielle, 2. Requête plus facile pour les enfants, 3. Aucune limite sur la profondeur de la hiérarchie, 4. Une seule requête à mettre à jour/insérer/supprimer. Sources: http://gmarik.info/blog/2012/10/14/recursive-data-structures-with-rails/http://www.slideshare.net/billkarwin/models-for-hierarchical-data/http: //stackoverflow.com/questions/4907698/design-relational-database-use-hierarchical-datamodels-or-avoid-them – migu

Questions connexes