使用活动资源对API进行分页的最佳方法是什么?我正在构建API和使用API的应用程序,所以我需要两个方程式。
我见过人们在ActiveResource(例如X-PERPAGE)中为他们想要的页面设置标题。
任何建议都会很棒。寻找最佳解决方案。
答案 0 :(得分:2)
1)使用下一个代码补丁activeresource
module ActiveResource
class Connection
alias_method :origin_handle_response, :handle_response
def handle_response(response)
Thread.current["active_resource_response_#{self.object_id}"] = response
origin_handle_response(response)
end
def response
Thread.current["active_resource_response_#{self.object_id}"]
end
end
end
它将增加执行rest方法后读取响应的可能性 2)在服务器端使用kaminari你可以做下一步
@users = User.page(params[:page]).per(params[:per_page])
response.headers["total"] = @users.total_count.to_s
response.headers["offset"] = @users.offset_value.to_s
response.headers["limit"] = @users.limit_value.to_s
respond_with(@users)
3)在客户端再次使用kaminari
users = Users.all(:params=>params)
response = Users.connection.response
@users = Kaminari::PaginatableArray.new(
users,
{
:limit => response['limit'].to_i ,
:offset =>response['offset'].to_i ,
:total_count => response['total'].to_i
}
)
答案 1 :(得分:2)
ActiveResource 4.0.0.beta1引入了ActiveResource::Collection
,其中(根据源代码中的文档)是处理解析索引响应的包装器。可以设置Post
类来处理它:
class Post < ActiveResource::Base
self.site = "http://example.com"
self.collection_parser = PaginatedCollection
end
您可以在API响应中嵌入您的分页数据,并使用ActiveResource::Collection
检索它们。
详细说明如何使用此功能:http://javiersaldana.com/2013/04/29/pagination-with-activeresource.html