Rails Pagination - найти номер страницы по идентификатору экземпляра - PullRequest
15 голосов
/ 24 марта 2011

В случае, если у меня есть идентификатор элемента, разбитого на страницы, как я могу найти номер его страницы?

Я использую рельсы 3 и каминари.

К сожалению, передача номера страницы в качестве параметра не возможна. Элементы, разбитые на страницы, представляют собой изображения галереи изображений, поддерживаемой пользовательским контентом, развивающимся с течением времени. Это означает, что изображение может появиться на первой странице на первой неделе, но на второй странице на следующей неделе.

Другим вариантом было бы поддерживать числовой порядок изображений (acts_as_list), опять же, в моем случае это невозможно, поскольку фотографии могут появляться в нескольких галереях с разными областями действия.

редактирование:

Добавил награду к этому, поскольку я вижу тот же вопрос, заданный несколько лет назад в разных местах без решения. Я рад принять SQL-запрос, если не найдено решение для активной записи.

Ответы [ 3 ]

20 голосов
/ 27 марта 2011
# Your "per_page" count
per_page = 30
# Your Image instance:
@image = Image.find_your_image
# SQL. If you're ordering by id, how many lower IDs are there?
position = Image.where("id <= ?", @image.id").count
# Your page
page = (position.to_f/per_page).ceil

Теперь вы можете обернуть его как метод класса

class Image < ActiveRecord::Base
  def page(order = :id, per_page = 30)
    position = Image.where("#{order} <= ?", self.send(order)).count
    (position.to_f/per_page).ceil
  end
end

Usage

@image.page
@image.page(:created_at)
@image.page(:title, 10)
0 голосов
/ 27 мая 2015

У меня была та же проблема, но с несколькими заказами.Я только мог заставить его работать с небольшим трюком.

@model = Model.find(params[:id])
page = 1
  if params[:page]
  page = params[:page]
else
  page = (Model.some_scope.order(some_attribute: :desc, updated_at: :desc).pluck(:id).index(@model.id).to_f / per_page).ceil
end

Это хорошо работает, только если вам не нужно много записей в результате извлечения, иначе это замедлится.

0 голосов
/ 25 марта 2011

Если вы найдете идентификатор страницы, значит, ему потребуются некоторые sql-запросы.вместо этого вы можете передать значение страницы в качестве параметра.Это также повысит вашу производительность.

...