comment trouver nombre de correspondances de balises dans les actes que sur tagable

StackOverflow https://stackoverflow.com/questions/4665979

  •  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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top