8

私は一日中これを理解しようとしてきました、そしてそれは私を夢中にさせています.

ServerApp と ClientApp の 2 つの Rails アプリがあります。ClientApp は、Her gem を使用して、API を介して ServerApp からデータを取得します。ページネーション情報が必要になるまでは、すべてが素晴らしかったです。

これは私が注文を取得するために使用している方法です(これはページネーションにkamainariを使用し、検索にランサックを使用します):

# ServerApp
def search
  @search = Order.includes(:documents, :client).order('id desc').search(params[:q])
  @orders = @search.result(distinct: true).page(params[:page]).per(params[:per])

  respond_with @orders.as_json(include: :documents)
end

Her が注文のコレクションとして使用する json のハッシュの配列を返します。それはうまくいきます。

# Response
[
  {
    "client_id": 239,
    "created_at": "2013-05-15T15:37:03-07:00",
    "id": 2422,
    "ordered_at": "2013-05-15T15:37:03-07:00",
    "origin": "online",
    "updated_at": "2013-05-15T15:37:03-07:00",
    "documents": [
      { ... }
    ]
  },
  ...
]

しかし、ページネーション情報が必要でした。json でメタデータとして送信する必要があるように見えました。そこで、私はこれに対する私の反応を次のように変更します。

respond_to do |format|
  format.json do
    render json: { orders: @orders.as_json(include: :documents), metadata: 'sent' }
  end
end

これは実際にメタデータを送信するので、ClientApp で @orders.metadata を記述して「送信」できます。しかし、私の注文は「orders」内の配列にネストされているため、@orders.orders を使用する必要があり、Her コレクションではなく配列のように扱われます。

いくつか読んだ後、ヘッダーを介してページネーション情報を送信することは、他の多くの人がこれを行った方法であるように思われました(このガイドを使用して、 after_filter にヘッダーを設定することができました)。しかし、ClientApp でこれらの応答ヘッダーを取得する方法についてさらに迷っています。ファラデー ミドルウェアが必要だと思いますが、これを機能させることができません。

どうすればこれを実現できるかを誰かが知っていれば、とても感謝しています。これで頭を壁にぶつけてもう一日はかかりませんが、これを解決するための重要な情報が 1 つだけあるように感じます!

4

3 に答える 3