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

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

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

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

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

person Michal Bryxí    schedule 26.02.2017    source источник


Ответы (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

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

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

person beniutek    schedule 25.08.2017