【问题标题】:How can I send paginated requests to third party API in rails如何在 Rails 中向第三方 API 发送分页请求
【发布时间】:2019-08-10 13:21:09
【问题描述】:

我正在 Rails 中构建一个 Web 应用程序以从第三方 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 %>

【问题讨论】:

  • @Unixmonkey 我认为 Kaminari 和 will_paginate 做不同的事情。在这些宝石中,您首先收集所有记录,然后对它们进行分页。我的问题是,我想显示链接是我的视图,例如 1|2|3...N,当您单击任何数字时,它应该使用 page=n 发送 API 请求
  • 是的,抱歉我没有提供更多信息。我的想法是也许你可以使用它的分页链接来构建你的界面,或者用空记录填充你的数组来填充它。自己构建它可能更简单,但也许它可以帮助灵感或标记。
  • 您应该能够使用 will_paginate gem 并且在您的控制器中只需监听 params[:page]params[:per_page] 并将其传递到您的活动记录查询中。

标签: ruby-on-rails api pagination


【解决方案1】:

如果您想手动执行此操作,则比仅使用 will_paginate gem 需要更多的工作

首先,您需要获取记录数,以便知道有多少页面(也就是页面底部有多少链接)

@num_of_records = Object.count / per_page

那你就需要根据要显示的链接数量通过JS来处理了。

一旦用户点击 yourlink.com/?page=2,它应该会加载正确的数据,或者如果您选择这样做,您可以从 div/table 中删除元素并通过返回它们来插入新元素(如果您执行 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

【讨论】:

    【解决方案2】:

    我强烈建议改用 kaminari。他们有办法轻松做到这一点。 https://github.com/kaminari/kaminari#paginating-a-generic-array-object

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-11
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 2017-09-20
      • 2018-01-10
      相关资源
      最近更新 更多