将分页计数添加到 Rails API 中的相同 GET 响应

Add pagination count to the same GET response in Rails API

我可以实现同样的事情,但是在多个命令中。有什么方法可以将它们和 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

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

非常感谢!

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

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

在我的例子中,将响应合并到哈希中,例如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 }