2011-10-08 9 views
5

Acts-as-taggable funciona de maravilla y todo, pero me preguntaba si había una forma de restringir la nube de etiquetas solo a las etiquetas más populares. No parece que ordena su nube en el orden en que se crearon las etiquetas.Mostrando solo las etiquetas más populares en la nube de etiquetas acts_as_taggable_on

Pero tiene más sentido que la nube de etiquetas muestre solo las etiquetas más populares.

Mi controlador tiene:

def styles_tag_cloud 
    @tags = Tattoo.tag_counts_on(:styles).limit(40) 
    end 

y mi opinión tiene:

<% tag_cloud(styles_tag_cloud, %w(css1 css2 css3 css4)) do |tag, css_class| %> 
    <%= link_to tag.name, { :action => :tagged, :controller =>:index, :id => tag.name }, :class => css_class %> 
<% end %> 

Pero todo esto hace es mostrar los primeros 40 etiquetas creadas, y luego los tamaños de cada etiqueta de acuerdo a la cantidad de veces su usado

Respuesta

7

Puede obtener MyModel.tag_counts_on(:tags) para obtener una lista de etiquetas, ordenadas por tag count descender (la etiqueta más usada primero) y si desea limitarla a un número específico, usted puede anexar .limit(my_magic_number) a él.

Así que para obtener una lista de las 10 etiquetas más populares del modelo de Post que haría algo como esto:

@tag_counts = Post.tag_counts_on(:tags).limit(10) 

Si a continuación desea ver cuántas veces se ha utilizado cada etiqueta, el los objetos en @tags tienen cada uno un atributo count que puede ver.

EDIT: (extraído de una de mis comentarios más abajo) ... y si quieres las etiquetas en un orden específico (las etiquetas más usadas primero) con un límite definido externamente, puede utilizar esto: Post.tag_counts_on(:tags).order('count desc').limit(however_many_you_want)

+0

'tag_counts_on' se documenta aquí: https://github.com/mbleigh/acts-as-taggable-on (busque" Cálculos de la nube de etiquetas "en la página) – Frost

+0

He actualizado mi pregunta, la etiqueta_counts_on simple agarra todo las etiquetas y cuenta cada una. Estoy tratando de ordenarlos por el conteo de etiquetas o solo mostrar las etiquetas más populares – rugbert

+4

Bueno, entonces haga algo como 'Post.tag_counts_on (: tags) .order ('count desc'). Limit (however_many_you_want)'. – Frost

1

Según la documentación, sólo hay que pasar las opciones que necesita para sus cálculos, en su caso (el controlador):

def styles_tag_cloud 
    @tags = Tattoo.tag_counts_on(:styles).limit(40) 
    end 

su opinión sigue siendo la misma. ¡Saludos!

Cuestiones relacionadas