2010-08-29 14 views
31
books = Book.find(:all) 
articles = Articles.find(:all) 

Mediante la lectura de http://guides.rubyonrails.org/layouts_and_rendering.html sabía que podía hacer algo como:asocia dos arreglos ActiveRecord y ordenado por created_at

<%= render :partial => [customer1, employee1, customer2, employee2] %> 

y sería utilizar _customer y _employee parciales según el caso.

por lo que quiero hacer algo así:

materials = books + articles 
materials.sort_by_created_at 

y en la vista:

<%= render :partial => materials %> 

Cómo hacer la fusión y la clasificación de dos matrices ActiveRecord ??? Gracias por la ayuda!

Respuesta

72

Estás muy cerca. La concatenación de las matrices se realiza con el signo más:

materials = books + articles

Clasificación de la matriz combinada se puede hacer mediante una llamada al sort_by método (mezclado en de Enumerable) y que pasa en el atributo con el prefijo &:

materials.sort_by(&:created_at)

Esto no será bueno en cuanto a rendimiento para grandes conjuntos de resultados. Puede considerar derivar los modelos Libro y Artículo de una clase principal (como Material) si son similares, utilizando STI (herencia de tabla única) para almacenarlos en la misma tabla y usando find con una cláusula order, para que la base de datos pueda la clasificación para ti.

6

También puede usar Array#concat para combinar dos matrices.

Cuestiones relacionadas