Отключить разбиение на страницы для отношений
Дано 2 ресурса:
jsonapi_resources :companies
jsonapi_resources :users
Пользователь has_many Компании
default_paginator =: постраничный
/companies
запрос разбит на страницы, и это то, что я хочу. Но я также хочу отключить его для запроса отношений /users/4/companies
, Как это сделать?
1 ответ
Решение
Лучшее решение, которое я нашел, будет переопределить JSONAPI::RequestParser#parse_pagination
как это:
class CustomNonePaginator < JSONAPI::Paginator
def initialize
end
def apply(relation, _order_options)
relation
end
def calculate_page_count(record_count)
record_count
end
end
class JSONAPI::RequestParser
def parse_pagination(page)
if disable_pagination?
@paginator = CustomNonePaginator.new
else
original_parse_pagination(page)
end
end
def disable_pagination?
# your logic here
# request params are available through @params or @context variables
# so you get your action, path or any context data
end
def original_parse_pagination(page)
paginator_name = @resource_klass._paginator
@paginator = JSONAPI::Paginator.paginator_for(paginator_name).new(page) unless paginator_name == :none
rescue JSONAPI::Exceptions::Error => e
@errors.concat(e.errors)
end
end