Без необходимости использовать какой-либо драгоценный камень, я разбиваю свои извлеченные данные. В API я возвращаю ссылки ha sh, которые должны возвращать предыдущие, следующие, первые, последние и собственные значения
Данные возвращаются, если params [: offset] = 0, где limit = 10, затем смещение будет
offset = params[:offset].to_i * limit
data = slice(offset, limit)
Теперь для расчета ссылок:
class PaginationMetaGenerator
DEFAULT_OFFSET = 0
DEFAULT_LIMIT = 10
def initialize(request:, count:)
@url = request.base_url + request.path
@offset = request.params[:offset].to_i || DEFAULT_OFFSET
@limit = request.params[:limit].to_i || DEFAULT_LIMIT
@count = count
@hash = {}
end
def call
if @offset > 0 && @offset <= @limit
@hash[:first] = generate_url(0)
@hash[:prev] = generate_url(@offset - 1)
end
@hash[:self] = generate_url(@offset)
if @offset < @count && @limit < @count
@hash[:next] = generate_url(@offset + 1)
@hash[:last] = generate_url(@count)
end
@hash
end
private
def generate_url(offset)
[@url, url_params(offset)].join('?')
end
def url_params(offset)
url_params = {}
url_params[:offset] = offset if include_page?(offset)
url_params[:limit] = @limit if include_per_page?
url_params.to_query
end
def include_per_page?
@limit != 0
end
def include_page?(offset)
offset <= @count
end
end
Но следующее и последнее возвращенное значение неверно. Я довольно тупой в расчете здесь, и мне нужна помощь в расчете значений