2012-08-08 10 views
6

Tengo una consulta de registro activo en el que estoy usando group_byfin Active Record por el tamaño del grupo

@foo = Foo.group_by(&:relation) 

A continuación, en la vista que estoy usando

@foo.each do |group, values| 
group x has values.count elements 
end 

¿Hay alguna manera de podría ordenar estos por el recuento de cada grupo?

Respuesta

7

group_by no es un método ActiveRecord, es un grupo. group_by es un método de Enumerator.

¿Qué hay de

@foo = Foo.group('relation').order('count_id asc').count('id') 

Tomado de "Order by" result of "group by" count?.

De lo contrario, si desea ordenar en el nivel de Ruby, que podría hacer

disordered_hash = {:two=>[1, 2], :one=>[1], :three=>[1, 2, 3]} 
ordered_array = disordered_hash.sort {|k, v| k[1].count <=> v[1].count} # add .reverse if you want 
# => [[:one, [1]], [:two, [1, 2]], [:three, [1, 2, 3]]] 
+0

método no definido 'fin' para #

+0

lo que si cambia group_by al grupo? Editado mi respuesta. – oldergod

+0

Eso funcionaría, te lo daré. Aunque creo que está haciendo su agrupación en el nivel db, mientras que el otro me estaba dando cosas que podría repetir en ruby. –

Cuestiones relacionadas