【问题标题】:Add pagination count to the same GET response in Rails API在 Rails API 中将分页计数添加到相同的 GET 响应
【发布时间】:2019-12-12 16:02:31
【问题描述】:

我可以实现相同的目标,但需要使用多个命令。有什么方法可以将它们和render API 响应组合到一个 GET 请求中?

列出此页面中的所有记录:

render json: Apartment.paginate(page: 1, per_page: 20)

获取总页数:

render json: Apartment.paginate(page: 1, per_page: 20).total_pages

获取总条目:

render json: Apartment.paginate(page: 1, per_page: 20).total_entries

对任何方法都很满意:合并响应、覆盖响应甚至为每条记录添加计数。

非常感谢!

【问题讨论】:

    标签: ruby-on-rails pagination will-paginate


    【解决方案1】:

    您可以在单个 json 响应中发送所有 3 个命令,然后您的所有数据都在一个对象中。

    @apartments = Apartment.paginate(page: 1, per_page: 20)
    render json: {apartments: @apartments, 
                 total_pages: @apartments.total_pages, 
                 total_entries: @apartments.total_entries }
    

    【讨论】:

    • 您可以在 @apartments.total_pages@apartments.total_entries 的每一行上重复使用 @apartments 来干燥它
    • 干得好。我已经检查过了,它运行良好。所以一般来说,这是减少 API 命中次数的方法。
    • 这似乎有问题。我发现将@apartments 放入此哈希时未执行Active Model Serializer。具体来说,这个class ApartmentSerializer < ActiveModel::Serializer 不起作用。您认为有什么合适的选项可以将您的方法与 Active Model Serializer 一起使用?
    • 我已经回答了我自己的问题,所以现在已经排序了
    【解决方案2】:

    在我的情况下,将响应组合在哈希中,例如render json: {total_pages: @apartments.total_pages, total_entries: @apartments.total_entries, apartments: @apartments} 没有完全发挥作用。

    根本原因是serializers/apartment_serializer.rb没有被执行,我不得不像往常一样找到解决方案来执行它。因此,如果使用 Active Model Serializer,选项将是:

    如果尚未创建文件,请创建文件: config/initializers/active_model_serializer.rb

    # to support multiple response types, convert into format conforming JSON API specification
    ActiveModelSerializers.config.adapter = :json_api
    

    apartments_controller.rb:

    @apartments = Apartment.paginate(page: 1, per_page: 20)
    
    render json: @apartments, meta: { total_pages: @apartments.total_pages, total_entries: @apartments.total_entries }
    
    

    【讨论】:

    • @liamison 我也很欣赏您回答自己的方式,但仍保持原样接受的答案。对此问题和答案 +1 :)
    • 不客气。这个解决方案仍然存在于我的应用程序中,并且从未回头修改它,因为在我的情况下完美运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2014-04-29
    • 2020-06-11
    • 1970-01-01
    相关资源
    最近更新 更多