2

给定2个资源:

jsonapi_resources :companies
jsonapi_resources :users

用户 has_many 公司

default_paginator = :paged

/companies请求是分页的,这就是我想要的。但我也想为关系请求禁用它/users/4/companies。这个怎么做?

4

1 回答 1

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
于 2017-02-02T15:29:38.633 回答