我整天都在想办法解决这个问题,这让我发疯。
我有两个 Rails 应用程序,ServerApp 和 ClientApp。ClientApp 使用 Her gem 通过 API 从 ServerApp 获取数据。在我需要分页信息之前,一切都很好。
这是我用来获取订单的方法(这使用 kamainari 进行分页和 ransack 进行搜索):
# 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
它以 json 格式返回一个哈希数组,Her 将其用作订单集合。这很好用。
# 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,然后它将它视为一个数组而不是她的集合。
在做了一些阅读之后,似乎通过标题发送分页信息是很多其他人这样做的方式(我能够使用本指南在 after_filter 中设置标题)。但是我对如何在我的 ClientApp 中获取这些响应标头更加迷茫——我相信我需要一个法拉第中间件,但我只是没有运气让它工作。
如果有人知道我如何才能完成这项工作,我将不胜感激。我不能再把头撞在墙上了,但我觉得我只是解决这个问题的重要信息之一!