books = Book.find(:all)
articles = Articles.find(:all)
En lisant à partir de http://guides.rubyonrails.org/layouts_and_rendering.html je savais que je pouvais faire quelque chose comme:
<%= render :partial => [customer1, employee1, customer2, employee2] %>
et il utiliserait les partiels _customer et _employee selon le cas.
Je veux donc faire quelque chose comme ça:
materials = books + articles
materials.sort_by_created_at
et dans la vue:
<%= render :partial => materials %>
Comment faire la fusion et le tri de deux tableaux ActiveRecord ??? Merci pour votre aide!
Tu es très proche. La concaténation des tableaux se fait avec le signe plus:
materials = books + articles
Le tri du tableau combiné peut être effectué en appelant la méthode sort_by
(Mélangée à partir de Enumerable
) et en passant l'attribut préfixé avec &:
materials.sort_by(&:created_at)
Ce ne sera pas bon en termes de performances pour les grands ensembles de résultats. Vous pouvez envisager de dériver les modèles Book et Article d'une classe parente (comme Material) s'ils sont similaires, en utilisant STI (Single Table Inheritance) pour les stocker dans la même table et en utilisant find
avec un order
clause, afin que la base de données puisse faire le tri pour vous.
Vous pouvez aussi utiliser Array#concat
pour fusionner deux tableaux.