jsonapi-ресурсы условно отключают пагинатор

Я использую гем jsonapi-resources в своем приложении Rails. Один из моих ресурсов использует нумерацию страниц. Есть случаи, когда я хочу отключить нумерацию страниц и убедиться, что пользователь вернет все результаты.

Я попробовал пользовательскую реализацию с некоторым пользовательским фильтром, но не смог.

Я пытался передать "странные" значения в paginator, но это не помогло (примеры для paged paginator):

  • /api/v1/bars?page[size]=-1 - значение не допускается
  • /api/v1/bars?page[size]=0 - значение не допускается
  • /api/v1/bars?page[size]=999999 - Конечно, это может сработать, но это 100%

1 ответ

Решение

Я получил точно такую ​​же проблему сегодня и нашел этот вопрос без ответа.

Ниже описано, как я справился с проблемой.

class CustomPaginator < PagedPaginator
  attr_reader :limit, :offset, :disable_pagination

  def initialize(params)
    @disable_pagination = params.nil?
    super
  end

  def apply(relation, _order_options)
    disable_pagination ? relation : super
  end
end

и в ресурсах я хотел использовать CustomPaginator Я только добавил paginator :custom как ниже:

class UserResource < JSONAPI::Resource
  paginator :custom
  ....user implementation
end

теперь всякий раз, когда я хочу использовать paginator, мне нужно явно использовать параметры пагинации, когда я делаю запрос к серверу, и когда я не использую их, я получаю полный не разбитый на страницы ответ.

Реализация класса не идеальна (дух!), Но она просто показывает вам общую концепцию

Другие вопросы по тегам