Как разбить несколько моделей на страницы с помощью гема Pagy в Rails?

Я использую Searchkick с для результатов поиска на страницы, и он отлично работает, если я ищу и гемом Pagyразбиваюразбивки на страницы только одну модель, но я не могу понять, как это сделать с Pagy, когда мне нужно объединить несколько моделей в один набор результатов поиска Searchkick.

Я попытался использовать « » Pagy, чтобы объединить все отдельные запросы модели Searchkick в массив, а затем просмотреть результаты в представлении, но это не дало никаких результатов поиска.

Вот код контроллера, который работает для одной модели:

      query = params[:q].presence || "*"
results = BlogPost.pagy_search(query, suggest: true, per_page: 20)
@pagy, @results = pagy_searchkick(results, items: 10)

И в представлении:

      <%= pagy_nav(@pagy).html_safe %>

Следующее работает как комбинированный запрос Searchkick для нескольких моделей, но не разбивается на страницы:

      @search_results = Searchkick.search(query, models: [PressRelease, BlogPost, User])

Как тогда я должен разбивать несколько моделей на страницы? Документация для Pagy's "дополнительный массивArray Extra " предупреждает:

если данные в массиве поступают из какой-либо БД или другого постоянного хранилища (т.е. не из хранилища в памяти), вам обязательно нужно просмотреть свой код.

Это именно то, что я пытаюсь сделать. Использование Pagy для разбивки на страницы результатов Searchkick из нескольких моделей кажется чем-то возможным. Если вы не должны использовать для этого массив Pagy, то как вы должны это делать?

1 ответ

Решение

Вы можете поместить это в инициализатор pagy:

      Searchkick.extend Pagy::Searchkick

Затем вы можете использовать его как обычно:

      results = Searchkick.pagy_search(query, models: [PressRelease, BlogPost, User])
@pagy, @results = pagy_searchkick(results, items: 10)

Это не задокументировано, поэтому вам, вероятно, следует создать проблему документации для отсутствующей документации.

Другие вопросы по тегам