Объединить два массива ActiveRecord и упорядочить с помощью create_at - PullRequest
32 голосов
/ 29 августа 2010
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 ??? Спасибо за помощь!

Ответы [ 2 ]

72 голосов
/ 29 августа 2010

Ты очень близко. Конкатенация массивов выполняется со знаком плюс:

materials = books + articles

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

materials.sort_by(&:created_at)

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

6 голосов
/ 24 января 2013

Вы также можете использовать Array#concat для объединения двух массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...