Domanda

Ho due voci nel mio database

Obj1 è etichettato con "ciao, mondo, pianeta" Obj2 è etichettato con "ciao"

se faccio modelName.tagged_with ([ "ciao", "mondo", "pianeta", "terra"],: qualsiasi => true)

Voglio ordinare gli oggetti restituiti in ordine di alto al più basso numero di variabili corrispondenti. quindi in questo caso mi piacerebbe l'ordine di essere Obj1, obj2

come posso fare questo? c'è un modo per ottenere il numero di tag abbinati per ciascuno dei risultati restituiti?

È stato utile?

Soluzione

È possibile chiamare tag_list sugli oggetti e l'uso che per capire quanti tag ci sono:

tags = %w{hello world planet earth}
objs = ModelName.taggedWith(tags, :any => true)
objs.sort_by! { |o| -(tags & o.tag_list).length }

Il tags & o.tag_list produce l'intersezione dei tag che stai cercando e le tag trovato, poi ci nega la dimensione dell'intersezione per dire sort_by (che sorta in ordine ascendente) per mettere incroci più grandi nella parte anteriore, negando il risultato è un modo semplice per invertire l'ordinamento abituale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top