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

Leggendo da http://guides.rubyonrails.org/layouts_and_rendering.html sapevo che avrei potuto fare qualcosa di simile:Unire due array ActiveRecord e l'ordine da created_at

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

e sarebbe usare _customer e _employee parziali a seconda dei casi.

Quindi voglio fare qualcosa di simile:

materials = books + articles 
materials.sort_by_created_at 

e nella vista:

<%= render :partial => materials %> 

Come fare la fusione e lo smistamento di due array ActiveRecord ??? Grazie per l'aiuto!

risposta

72

Sei molto vicino. Concatenando le matrici avviene con il segno più:

materials = books + articles

Ordinando la serie combinata può essere fatto chiamando il metodo sort_by (mescolato da Enumerable) e passando l'attributo prefisso &:

materials.sort_by(&:created_at)

Questo non sarà un buon rendimento per set di risultati di grandi dimensioni. Potresti considerare di derivare i modelli Book e Article da una classe genitore (come Material) se sono simili, usando STI (Single Table Eredità) per memorizzarli nella stessa tabella e usando find con una clausola order, così il database può fare l'ordinamento per te.

6

È inoltre possibile utilizzare Array#concat per unire due array.