Как я могу отправлять постраничные запросы в сторонние API в рельсах - PullRequest
1 голос
/ 20 марта 2019

Я собираю веб-приложение в рельсах для извлечения записей из стороннего API.Этот сторонний API принимает параметр page.Например: GET http://thirdpartyapi.com/records?page=2

Как я могу построить мой HTML в разбивке на страницы, чтобы при нажатии пользователем на номер 2 он отправлял page=2, а когда пользователь нажимал на номер 4, он отправлял page=4 в запросах.Есть ли для этого драгоценный камень?

class DemoController < ApplicationController
  def index
    response = HTTP.get('http://thirdparty.com/records', {query: {page: params[:page]}}) # it will return 30 items by default
    @items = response['items'].paginate(page: params[:page], per_page: 10)
  end
end

Это мои взгляды

<%= will_paginate %>

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Я настоятельно рекомендую вместо этого использовать каминари.у них есть способ сделать это легко.https://github.com/kaminari/kaminari#paginating-a-generic-array-object

0 голосов
/ 20 марта 2019

Если вы хотите сделать это вручную, это больше, чем просто использовать will_paginate gem

Сначала вам нужно получить количество записей, чтобы вы знали, сколько страниц (иначесколько ссылок внизу у вас будет для страниц)

@num_of_records = Object.count / per_page

Тогда вам нужно будет обрабатывать это через JS в зависимости от количества ссылок, которые вы хотите отобразить.

Однажды пользовательщелкает на yourlink.com/?page=2, он должен загружаться с правильными данными, или, если вы решите, вы можете удалить элементы из div / таблицы и вставить новые, возвращая их, если вы делаете вызов AJAX.

Ваш контроллер будет выглядеть примерно так:

def index
    page = params[:page] || 1
    per_page = 10

    @num_of_records = Object.count / per_page

    objects_to_append = Object.paginate(:page => page, :per_page => perPage)

    render json: { success: true, objects_to_append: objects_to_append }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...