Ich habe versucht, den ganzen Tag herauszufinden, und es macht mich verrückt.Rails Paginierung in API mit Her, Faraday
Ich habe zwei Rails Apps, ServerApp und ClientApp. ClientApp ruft Daten von ServerApp über eine API mit dem Her-Juwel ab. Alles war großartig, bis ich Seitenumbruch Informationen brauchte.
Dies ist die Methode, die ich um die Aufträge zu bekommen bin mit (dies verwendet kamainari für Paginierung und plündern für Suche):
# 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
Es gibt ein Array von Hashes in json, die sie als eine Sammlung verwendet von Aufträge. Das funktioniert gut.
# 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": [
{ ... }
]
},
...
]
Aber ich brauchte Seitenumbruch Informationen. Es sah aus, als ob ich send it as metadata with my json brauchte. Also habe ich meine Antwort auf diese ändern:
respond_to do |format|
format.json do
render json: { orders: @orders.as_json(include: :documents), metadata: 'sent' }
end
end
Diese in der Tat Metadaten sendet über, so in meinem ClientApp I @ orders.metadata schreiben und 'geschickt' bekommen. Aber jetzt sind meine Bestellungen in einem Array innerhalb von 'Bestellungen' verschachtelt, also muss ich @ orders.orders verwenden, und dann behandelt es es wie ein Array anstelle einer Her-Sammlung.
Nach dem Lesen, schien es Senden von Paginierung Informationen über Header war die Art und Weise, wie viele andere Leute dies (ich war in der Lage, die Header in einem After_filter mit this guide eingerichtet). Aber ich bin noch mehr darüber verloren, wie ich diese Antwort-Header in meiner ClientApp bekomme - ich glaube, ich brauche eine Faraday-Middleware, aber ich habe einfach kein Glück, dass das funktioniert.
Wenn jemand weiß, wie ich das schaffen kann, wäre ich sehr dankbar. Ich kann keinen weiteren Tag damit verbringen, meinen Kopf gegen die Wand zu schlagen, aber ich fühle mich, als wäre ich nur ein wichtiges Stück von Informationen weg von diesem zu lösen!
evt. Dies könnte auch ein Problem für das Her-Projekt sein. Sie können ein Problem dort öffnen und sehen, ob Sie ein Feedback von den Projektbetreuern – poseid
erhalten haben. Ich hatte darüber nachgedacht, es auf die Her github-Seite zu posten, aber ich dachte, dies wäre eher ein Missverständnis von meiner Seite und kein Problem von ihrer Seite. – d3vkit