jsonapi-resources 有条件地禁用分页器
jsonapi-resources conditionally disable paginator
我用jsonapi-resources gem in my Rails app. One of my resources is using pagination。在某些情况下,我想禁用分页并确保用户将取回 所有结果。
我尝试使用一些自定义过滤器进行自定义实现,但失败了。
我尝试将 "weird" 值传递给分页器,但这没有帮助(分页分页器的示例):
/api/v1/bars?page[size]=-1
- 不允许的值
/api/v1/bars?page[size]=0
- 不允许的值
/api/v1/bars?page[size]=999999
- 当然,这可能有效,但它是 100%
我今天遇到了完全相同的问题,并找到了这个未回答的问题。
下面是我是如何处理这个问题的。
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
现在每当我想使用分页器时,我需要在向服务器发出请求时显式使用分页参数,而当我不使用它们时,我将获得完整的未分页响应。
class 实现并不完美(呃!)但它只是向您展示一般概念
我用jsonapi-resources gem in my Rails app. One of my resources is using pagination。在某些情况下,我想禁用分页并确保用户将取回 所有结果。
我尝试使用一些自定义过滤器进行自定义实现,但失败了。
我尝试将 "weird" 值传递给分页器,但这没有帮助(分页分页器的示例):
/api/v1/bars?page[size]=-1
- 不允许的值/api/v1/bars?page[size]=0
- 不允许的值/api/v1/bars?page[size]=999999
- 当然,这可能有效,但它是 100%
我今天遇到了完全相同的问题,并找到了这个未回答的问题。
下面是我是如何处理这个问题的。
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
现在每当我想使用分页器时,我需要在向服务器发出请求时显式使用分页参数,而当我不使用它们时,我将获得完整的未分页响应。
class 实现并不完美(呃!)但它只是向您展示一般概念