Объединить два массива ActiveRecord и упорядочить по create_at

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 ??? Спасибо за помощь!

32
задан PeterWong 29 August 2010 в 05:47
поделиться

1 ответ

Вы очень близки. Объединение массивов осуществляется с помощью знака плюс:

материалы = книги + статьи

Сортировку объединенного массива можно выполнить, вызвав метод sort_by (подмешанный из Enumerable ) и передачи атрибута с префиксом &:

materials.sort_by(&:created_at)

Это не будет хорошо с точки зрения производительности для больших наборов результатов. Вы можете рассмотреть возможность получения моделей Book и Article от родительского класса (например, Material), если они похожи, используя STI (Single Table Inheritance) для хранения их в одной таблице и используя find с . ]order, чтобы база данных могла выполнить сортировку за вас.

73
ответ дан 27 November 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: