给定2个资源:
jsonapi_resources :companies
jsonapi_resources :users
用户 has_many 公司
default_paginator = :paged
/companies
请求是分页的,这就是我想要的。但我也想为关系请求禁用它/users/4/companies
。这个怎么做?
给定2个资源:
jsonapi_resources :companies
jsonapi_resources :users
用户 has_many 公司
default_paginator = :paged
/companies
请求是分页的,这就是我想要的。但我也想为关系请求禁用它/users/4/companies
。这个怎么做?
我发现的最佳解决方案是这样覆盖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