Добавьте счетчик пагинаций к тому же GET-ответу в Rails API - PullRequest
0 голосов
/ 08 октября 2019

Я могу добиться того же, но несколькими командами. Есть ли способ объединить их и 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

Доволен любым методом: объедините ответ, перезапишите ответ или даже добавьте счетчик к каждой записи.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 08 октября 2019

вы можете отправить все 3 команды в одном ответе json, тогда все ваши данные находятся в одном объекте.

@apartments = Apartment.paginate(page: 1, per_page: 20)
render json: {apartments: @apartments, 
             total_pages: @apartments.total_pages, 
             total_entries: @apartments.total_entries }
0 голосов
/ 11 октября 2019

В моем случае объединить ответ внутри хеша, например, 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 }

...