2010-12-06 14 views
7

estoy trabajando con Ruby on Rails 2.3.8 y tengo una colección que se construye a partir de otras dos colecciones, de la siguiente manera:Cómo ordenar colección por atributo created_at

@coll1 = Model1.all 
@coll2 = Model2.all 

@coll = @coll1 << @coll2 

Ahora, lo haría me gusta ordenar esa colección por el atributo created_at en orden descendente. Por lo tanto, hice lo siguiente:

@sorted_coll = @coll.sort {|a,b| b.created_at <=> a.created_at} 

y tengo la siguiente excepción:

undefined method `created_at' for #<Array:0x5c1d440> 

eventhought existe para esos modelos.

¿Podría alguien ayudarme por favor?

+0

Si va a ordenar una matriz de objetos que deben usar 'sort_by' en lugar de' sort'. Hay veces en que 'sort' es más rápido, pero el acceso a los objetos no es uno de ellos. –

Respuesta

21

estuviera insertando otra matriz como otro elemento en la matriz @coll1, tiene dos opciones:

aplanar la matriz resultante:

@coll.flatten! 

o, preferentemente, sólo tiene que utilizar el + método:

@coll = @coll1 + @coll2 

Y para la clasificación debe usar sort_by:

@sorted_coll = @coll.sort_by { |obj| obj.created_at } 
2

tiene una matriz anidada dentro de su variable @coll. de este modo: http://codepad.org/jQ9cgpM1

tratar

@sorted = @coll1 + @coll2 

continuación, ordenar.

4
@coll1 = Model1.all 
@coll2 = Model2.all 

@coll = @coll1 + @coll2 

@sorted_coll = @coll.sort_by { |a| a.created_at } 
0

Como Jed Schneider indica, la solución es:

@coll1 = Model1.all 
@coll2 = Model2.all 

@coll = @coll1 + @coll2 # use + instead of << 
Cuestiones relacionadas