Paginierung an eine API gefunden
ich eine einfache Lösung für API Json Antwort Paginierung mit will_pagination Hinzufügen.
zunächst eine Klassenmethode in ApplicationController
zu schaffen, die ein after_filter
schaffen, die die Paginierung Meta-Daten in den Antwort-Header gesetzt werden:
application_controller.rb
class ApplicationController < ActionController::Base
protected
def self.set_pagination_headers(name, options = {})
after_filter(options) do |controller|
results = instance_variable_get("@#{name}")
headers["X-Pagination"] = {
total: results.total_entries,
total_pages: results.total_pages,
first_page: results.current_page == 1,
last_page: results.next_page.blank?,
previous_page: results.previous_page,
next_page: results.next_page,
out_of_bounds: results.out_of_bounds?,
offset: results.offset
}.to_json
end
end
end
dann in die Steuerung, die wir Paginierung Header hinzufügen möchten, können wir es so nennen:
widgets_controller.rb
class Api::V1::WidgetsController < Api::V1::BaseController
set_pagination_headers :widgets, only: [:index]
def index
@widgets = Widget.all.paginate(params).order("created_at desc")
respond_with @widgets
end
end
Antwort-Header,
> Cache-Control:max-age=0, private, must-revalidate
> Connection:keep-alive Content-Type:application/json; charset=utf-8
> Etag:"fe70f7bae4c6e5cdea7867aa7fc0c7b4"
> X-Pagination:{"total":14,"total_pages":1,"first_page":true,"last_page":true,"previous_page":null,"next_page":null,"out_of_bounds":false,"offset":0}
> Server:thin 1.3.1 codename Triple Espresso
> Set-Cookie:_widgets_session=BAh7CEkiD3Nlc3Npb25faWQGOgZFRkkiJTAzYjVlNzkwZTIyNzU4YTYwMDU0M2MwOTQ2ZWI3YWU2BjsAVEkiDWxhc3RfdXJsBjsARkkiM2h0dHA6Ly9tYWluYW5kbWUtc3RhZ2luZy5oZXJva3VhcHAuY29tL3VzZXJzLzEGOwBGSSIQX2NzcmZfdG9rZW4GOwBGSSIxdjd0SEp6cVhKamh5YTh1cnBUdmpBb0w5aVA0bS9QTEdON3g1UlFUYnBkND0GOwBG--71b3a24c216a414d8db04f312b5300c818e6bba4;
> path=/; HttpOnly Transfer-Encoding:Identity
> X-Request-Id:61b383ade49cba8b24a715a453ed6e1f X-Runtime:0.191485
> X-Ua-Compatible:IE=Edge,chrome=1
Source -Adding Pagination to an API
ja das ist, was ich tun will, jetzt weiß ich, wie es funktioniert es gibt wahrscheinlich zurück, was ich benötige, indem ich direkt zu JSON gerendert habe, jedoch fähig gewesen bin Ändern Sie das Format wie folgt. –
Überprüfen Sie die GitHub API Dokumente [1] für eine viel bessere Möglichkeit der Codierung Seitenumbruch in Ihrer Antwort (Hinweis: in den Kopfzeilen) [1]: http://developer.github.com/v3/#pagination – asymmetric
Wie Hast du diese Methoden gefunden? Sie sind nicht im Wiki "will_paginate" aufgeführt. – Francisco