Frage

Ich habe diese Vorlage:

# app/views/posts/index.rabl
collection @posts => :posts
attributes :id, :title, :subject
child(:user) { attributes :full_name }
node(:read) { |post| post.read_by?(@user) }

Hexe kehrt zurück:

{
    "posts": [
        {
            "post": {
                "id": 5,
                "title": "...",
                "subject": "...",
                "user": {
                    "full_name": "..."
                },
                "read": true
            }
        }
    ]
}

Und ich möchte hinzufügen, um einige Paginationsparams hinzuzufügen, um dies zu rendern:

{
    "posts": [
        {
            "post": {
                "id": 5,
                "title": "...",
                "subject": "...",
                "user": {
                    "full_name": "..."
                },
                "read": true
            }
        }
    ],
    "total": 42,
    "total_pages": 12
}

Irgendwelche Ideen? Danke vielmals!

War es hilfreich?

Lösung

Entschuldigung für meine Noob -Frage, Whitch wurde vom Readme beantwortet. Hier ist ein Beispiel für Pagination:

object false

node(:total) {|m| @posts.total_count }
node(:total_pages) {|m| @posts.num_pages }

child(@posts) do
  extends "api/v1/posts/show"
end

Hinweis: Ich benutze Kaminari für Pagination.

Andere Tipps

Bei der Suche nach kaminari und rabl Dies ist das erste und so ziemlich nur relevantes Ergebnis. Als solches möchte ich hier eine Lösung nach dem zurücklassen Halspezifikation Das erzeugt Links wie Dies.

Beginnen Sie zuerst mit der Aussicht:

# api/v1/posts/index.rabl
object false

child(@posts) do
  extends 'api/v1/posts/show'
end

node(:_links) do
  paginate @posts
end

Definieren Sie dann die paginierte Methode:

# app/helpers/api_helper
module ApiHelper
  def paginate(collection)
    current_page_num = collection.current_page
    last_page_num = collection.total_pages

    {
      :first => first_page,
      :previous => previous_page(current_page_num),
      :self => current_page(current_page_num),
      :next => next_page(current_page_num, last_page_num),
      :last => last_page(last_page_num)
    }
  end

  def first_page
    { :href => url_for(:page => 1) }
  end

  def previous_page(current_page_num)
    return nil if current_page_num <= 1
    { :href => url_for(:page => current_page_num-1) }
  end

  def current_page(current_page_num)
    { :href => url_for(:page => current_page_num) }
  end

  def next_page(current_page_num, last_page_num)
    return nil if current_page_num >= last_page_num
    { :href => url_for(:page => current_page_num+1) }
  end

  def last_page(last_page_num)
    { :href => url_for(:page => last_page_num) }
  end
end

Und schließlich den Helfer in die notwendigen Controller einbeziehen. Der Helfer könnte in a enthalten sein Api::BaseController, von denen alle API -Controller erben:

helper :api

Ich hätte das ohne Zag Zags Lösung nicht tun können, also .. vielen Dank!

Hinweis, für Will_Paginate 3.0.0 Die folgenden Werke:

node(:total) {|m| @posts.total_entries }
node(:total_pages) {|m| (@posts.total_entries.to_f / @posts.per_page).ceil }
node(:page_num){|m| @posts.current_page}

Dies könnte das sein, wonach Sie suchen;)

object false
node :comments do
  partial('posts/index', object: @posts)
end

node(:pagination) do
  {
    total:@posts.count,
    total_pages: 20
  }
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top