Пагинация из API с помощью will_paginate или kaminari

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

Как я могу использовать kaminari или will_paginate, чтобы они знали, что не нужно вставлять запрос на разбиение на страницы (потому что это через API), но по-прежнему отображали номера страниц и использовали общее количество страниц, возвращаемых API.

Я знаю, что вы можете разбить коллекцию на страницы, но я не хочу использовать это, потому что необработанный запрос (без разбиения на страницы занимает много времени)

Итак, вместо того, чтобы разбивать массив всех результатов на страницы, я хочу иметь возможность разбивать на страницы объект, который будет извлекать дополнительную страницу, когда это запрашивает paginator?


person Joseph Le Brech    schedule 07.09.2013    source источник


Ответы (1)


Во-первых, я хотел бы еще раз повторить то, о чем, по моему мнению, вы просите, чтобы убедиться, что я понимаю — пожалуйста, поправьте меня, если я ошибаюсь.

Вы используете неподконтрольный вам API и отправляете ему запрос на конкретную страницу результатов. Например, вы отправляете запрос http://some-service.com?page=3, и он отправляет обратно 10 результатов, а также сообщает, что общее количество доступных страниц равно 42.

Затем вы хотите показать пользователям вашего приложения результаты и указать, что они могут запросить предыдущую и следующую страницы, а также сообщить им, сколько всего страниц доступно. Когда пользователь вашего приложения щелкает ссылку next, вы хотите сделать запрос на http://some-service.com?page=4 и т. д.

Я не думаю, что для этого вам нужен kaminari или will-paginate - похоже, вы можете просто передать параметры, которые ваши пользователи отправляют в ваше приложение, в API, а затем вы передаете информацию, возвращенную из API, через ваш пользователи.

Например, ваши пользователи будут посещать такую ​​страницу, как http://your-application.com/results. В вашем контроллере вы получите params[:page], для которого вам нужно будет по умолчанию установить значение 1, если его нет в URL-адресе.

Затем вы можете сделать запрос к http://some-service.com/page=1 и сохранить общее количество страниц в переменной, например total_pages_available.

На ваш взгляд, вы можете проверить, больше ли params[:page] 1, и в этом случае вы должны показать «предыдущую» ссылку, которая ссылается на http://your-application.com/results?page=#{params[:page] - 1}. Вы также можете проверить, меньше ли params[:page] total_pages_available, и в этом случае вы должны показать «следующую» ссылку, которая ссылается на http://your-application.com/results?page=#{params[:page] + 1}.

person carols10cents    schedule 07.09.2013
comment
вы правы, мне действительно не нужен paginator, чтобы делать какие-либо запросы, только рендеринг номеров страниц. - person Joseph Le Brech; 08.09.2013