come trovare il numero di partite di tag in atti come il oggetto di tag
-
10-10-2019 - |
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?
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.