При поиске kaminari
и rabl
это первый и в значительной степени единственный релевантный результат.Поэтому я хотел бы оставить здесь решение в соответствии со спецификацией HAL , которая генерирует ссылки типа this .
Итак, сначала начнем с представления:
# api/v1/posts/index.rabl
object false
child(@posts) do
extends 'api/v1/posts/show'
end
node(:_links) do
paginate @posts
end
Затем перейдите к определению метода разбивки на страницы:
# 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
И, наконец, включите помощника в необходимые контроллеры.Помощник может быть включен в Api::BaseController
, от которого наследуются все контроллеры API:
helper :api
Я бы не смог сделать это без решения Zag zag .., так что ... Большое спасибо!