books = Book.find(:all) articles = Articles.find(:all)
Читая из http://guides.rubyonrails.org/layouts_and_rendering.html Я знал, что могу сделать что-то вроде:
<%= render :partial => [customer1, employee1, customer2, employee2] %>
, и он будет использовать парциальные _customer и _employee в зависимости от ситуации.
Поэтому я хочу сделать что-то подобное:
materials = books + articles materials.sort_by_created_at
и в представлении:
<%= render :partial => materials %>
Как сделать объединение и сортировка двух массивов ActiveRecord ??? Спасибо за помощь!
Вы очень близки. Объединение массивов осуществляется с помощью знака плюс:
материалы = книги + статьи
Сортировку объединенного массива можно выполнить, вызвав метод sort_by
(подмешанный из Enumerable
) и передачи атрибута с префиксом &:
materials.sort_by(&:created_at)
Это не будет хорошо с точки зрения производительности для больших наборов результатов. Вы можете рассмотреть возможность получения моделей Book и Article от родительского класса (например, Material), если они похожи, используя STI (Single Table Inheritance) для хранения их в одной таблице и используя find
с . ]order
, чтобы база данных могла выполнить сортировку за вас.