comment trouver nombre de correspondances de balises dans les actes que sur tagable
-
10-10-2019 - |
Question
J'ai deux entrées dans ma base de données
Obj1 est marqué avec « bonjour, monde, planète » Obj2 est marqué avec "bonjour"
si je modelName.tagged_with ([ "bonjour", "monde", "planète", "terre"],: tout => true)
Je veux trier les objets retournés dans l'ordre le plus élevé au plus faible nombre de balises correspondantes. dans ce cas je voudrais l'ordre d'être Obj1, Obj2
Comment puis-je faire cela? est-il un moyen d'obtenir nombre d'étiquettes adaptées pour chacun des résultats retournés?
La solution
Vous pouvez appeler tag_list
sur les objets et l'utiliser pour savoir combien il y a des balises:
tags = %w{hello world planet earth}
objs = ModelName.taggedWith(tags, :any => true)
objs.sort_by! { |o| -(tags & o.tag_list).length }
Le tags & o.tag_list
donne l'intersection des balises que vous recherchez et les balises trouvé, on nie la taille de l'intersection de dire sort_by
(qui sortes dans l'ordre croissant) pour mettre les intersections plus grandes à l'avant, ce qui annule le résultat est un moyen facile d'inverser l'ordre de tri d'habitude.