@Stergy

Как написать пагинацию используя limit и offset?

Есть Api написанная на RoR с использованием гема Grape.
Выглядит примерно вот так:
class V1::Authenticated::PlanActions < Grape::API
  resource :tickets do

    get serializer: TicketSerializer do
      available_tickets = Base.accessible_by(@ability).map(&:id)
      ticket = Ticket.where(available_tickets_id: available_tickets)
      ticket
    end
  end
end


Возвращает примерно вот такой JSON
[
  {
    "name": "MP-3",
    "updated_at": "2019-06-19T14:18:27.371Z",
    "review_status": "Not Started"
  },
  {
    "name": "Co-1",
    "updated_at": "2019-06-19T14:40:55.372Z",
    "review_status": "Complete"
  },
  {
    "name": "",
    "updated_at": "2019-06-20T12:31:54.534Z",
    "review_status": "In Progress"
  },
  {
    "name": "CB-4e",
    "updated_at": "2019-06-20T12:37:46.838Z",
    "review_status": "Complete"
  },
  {
    "name": "Coun62",
    "updated_at": "2019-06-20T13:30:47.673Z",
    "review_status": "Not Started"
  },
  {
    "name": "5556jjj",
    "updated_at": "2019-06-20T13:43:12.527Z",
    "review_status": "Not Started"
  }
]


C фронта приходят params[page, per_page]
где page - нужная страница, а per_page - количество тикетов на странице.
Я знаю, что это можно реализовать с помощью готовых решений, таких как Kaminari
Ну мне нужно это реализовать вручную, желательно с использованием limt, offence.
Подскажите, пожалуйста, новичку как это реализовать, что почитать, в каком направлении двигаться?
Заранее благодарю
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
oh_shi
@oh_shi
Ticket.limit(params[:per_page]).offset((params[:page].to_i - 1) * params[:per_page])
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
POS_troi
@POS_troi
СадоМазо Админ, флудер, троль.
Почитать любые статьи и посмотреть любые example на тему "пишем бложик на %langname%" или в гугле "%database name% пагинация"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы