ActiveResource нумерация страниц - PullRequest
1 голос
/ 26 ноября 2011

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

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

Любые предложения будут великолепны.Ищете лучшее решение.

Ответы [ 2 ]

2 голосов
/ 30 апреля 2013

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

2 голосов
/ 09 января 2012

1) патч активного ресурса со следующим кодом

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) на стороне сервера с каминари вы можете сделать следующее

@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) снова на стороне клиента с каминари

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
    }   
)
...