2011-11-25 1 views
1

Что было бы лучшим способом приблизиться к разбивке на страницы по API с активным ресурсом? Я создаю API и приложение, использующее API, поэтому мне нужны оба конца уравнения.ActiveResource pagination

Я видел, как люди настраивают заголовки для какой страницы они хотят в ActiveResource (например, X-PERPAGE).

Любые предложения были бы замечательными. Ищите лучшее решение.

+1

я добавил драгоценный камень для стороны клиента https://rubygems.org/gems/activeresource-response – Fivell

ответ

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 

это добавит возможность прочитать ответ после того, как метод остальное выполняется 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 
    } 
) 
+0

Спасибо !! Я посмотрю на это! –

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