Прежде чем подумать о решении, вам необходимо сначала точно определить, каким вы хотите получить конечный результат. Если вы хотите отобразить несколько записей каждого типа на странице результатов, вы можете изменить опубликованный подход и объединить три разбитых на страницы результата, используя:
@results = @users + @posts + @comments
@results.sort! { |a, b| a.score(query) > b.score(query) }
Каждый объект должен иметь метод экземпляра 'Score', который позволяет сортировать его по приоритету запроса. Кроме того, вам необходимо изменить вид, чтобы обеспечить правильную визуализацию каждого элемента и обеспечить вызов нумерации страниц в модели с наибольшим количеством страниц.
В качестве альтернативы, более надежным способом было бы добавить службу полнотекстового поиска (например, Индексная емкость , Web Solr , Thinking Sphinx ). Технология того, что актуально для этих движений, быстро внедряется, поэтому проведите некоторое исследование и найдите тот, который соответствует вашим потребностям. Пример синтаксиса для этого будет что-то вроде:
User.multi_solr_search query, models: [Post, Comment]