wie Anzahl von Tag-Matches in Handlungen als markierbare auf finden
-
10-10-2019 - |
Frage
Ich habe zwei Einträge in der Datenbank
Obj1 mit "Hallo, Welt, plante" getaggt Obj2 ist mit "Hallo"
getaggtwenn ich modelName.tagged_with ([ "Hallo", "Welt", "Welt", "Erde"],: any => true)
Ich mag die zurückgegebenen Objekte in der Reihenfolge der höchsten bis zur niedrigsten Anzahl von Tags abgestimmt sortieren. so in diesem Fall würde ich den Auftrag wie Obj1, Obj2
zu seinWie kann ich das tun? Gibt es eine Möglichkeit Anzahl von Tags für jeden der zurückgegebenen Ergebnisse?
angepasst zu bekommenLösung
Sie können tag_list
auf die Objekte und die Verwendung rufen, dass, um herauszufinden, wie viele Tags gibt es:
tags = %w{hello world planet earth}
objs = ModelName.taggedWith(tags, :any => true)
objs.sort_by! { |o| -(tags & o.tag_list).length }
Die tags & o.tag_list
ergibt die Kreuzung des Tags Sie suchen und die Tags gefunden, dann negieren wir die Größe der Kreuzung zu sagen sort_by
(die in aufsteigender Reihenfolge) größere Kreuzungen an der Front zu setzen, um das Ergebnis zu negieren ist eine einfache Möglichkeit, die üblichen Sortierreihenfolge umgekehrt werden.