Вы можете сделать это одним из двух способов в зависимости от требований эффективности.
Менее эффективный метод заключается в извлечении 10 * N элементов, сортировке и уменьшении по мере необходимости:
# Fetch 10 most recent items from each type of object, sort by
# created_at, then pick top 10 of those.
@items = [ Ticket, Post, Report ].inject([ ]) do |a, with_class|
a + with_class.find(:all, :limit => 10, :order => 'created_at DESC')
end.sort_by(&:created_at).reverse[0, 10]
Другой метод заключается в создании индексной таблицы, которая имеет полиморфную связь с различными записями. Если вас интересует только показ 10 за раз, вы можете агрессивно обрезать это, используя какое-нибудь задание на грабли, чтобы ограничить его до 10 для пользователя или любой необходимой области действия.