2011-11-25 39 views
1

アクティブなリソースを持つAPIに対してページ分割にアプローチするにはどうすればよいでしょうか?私は、APIとAPIを消費するアプリケーションを構築しているので、私は方程式の両端を必要とします。ActiveResourceページ番号

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を実行した後に、それはあなたが行うことができます雷とサーバー側で)応答を読むための可能性を追加します次

@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 
    } 
) 
+0

クライアント側のために宝石を追加しましたありがとう!私はこれを調べます! –

2

ActiveResource 4.0.0 .beta1はActiveResource::Collectionを導入しています(ソースコードの文書によると)は、インデックス応答を解析するためのラッパーです。あなたのAPIレスポンス内の自分のページネーションのデータを埋め込むとActiveResource::Collectionでそれらを取得することができます

class Post < ActiveResource::Base 
    self.site = "http://example.com" 
    self.collection_parser = PaginatedCollection 
end 

Postクラスでそれを処理するように設定することができます。

これを使用する方法についての詳細な説明を参照してください:http://javiersaldana.com/2013/04/29/pagination-with-activeresource.html