Frage

Ich habe zwei Einträge in der Datenbank

Obj1 mit "Hallo, Welt, plante" getaggt Obj2 ist mit "Hallo"

getaggt

wenn 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 sein

Wie kann ich das tun? Gibt es eine Möglichkeit Anzahl von Tags für jeden der zurückgegebenen Ergebnisse?

angepasst zu bekommen
War es hilfreich?

Lö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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top