Вопрос

У меня есть несколько фотографий, которые разделены на последовательные страницы с помощью плагина will_paginate.Когда вы открываете фотографию, а затем возвращаетесь ко всем фотографиям по ссылке, вы всегда возвращаетесь на первую страницу (например,фотография отображается на странице 5, вы открываете фотографию, нажимаете ссылку, чтобы показать все фотографии, и ожидаете, что вы снова находитесь на странице 5, но вы находитесь на странице 1).

Итак, есть ли какой-нибудь способ получить номер страницы, которой принадлежит фотография?

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

Это было полезно?

Решение

page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

Другими словами.Если у вашей фотографии идентификатор 40 и ранее было 25 записей (при условии, что некоторые записи были удалены), по 20 записей на странице:

page = (25 / 20) + 1 = 2

Вы можете подсчитать количество записей перед выбранной записью, используя Model.count(:conditions => ['id < ?', record.id], :order => 'id').Правильный запрос зависит от того, какой фильтр сортировки вы применяете к этой таблице при перечислении всех объектов.

Другие советы

Номер страницы во многом зависит от результатов вашего поиска.Ваш поиск может содержать 1, 10 или 100 страниц в зависимости от набора результатов и количества элементов на странице.

Любая ссылка «показать все фотографии» может содержать информацию о поиске и разбиении на страницы, используя параметры GET, как вы описали.Или сохраните и извлеките с помощью файла cookie, чтобы результаты поиска сохранялись до тех пор, пока пользователи не очистят или не выберут новый поиск.

Вот еще одно решение:will_paginate просто использует параметры строки запроса «search_field» и «page»;вы можете извлечь их из хеша параметров Rails.Если вы отслеживаете те, кто использует состояние сеанса, вы можете при необходимости повторно применить их в коде контроллера.

То, как именно вы это сделаете, будет зависеть от вашего приложения.В приложении, над которым я работаю, поток таков, что я могу различать общий контекст и контекст участника.Пользователь входит в контекст участника со страницыmember#index.Поэтому я просто установил session[:member_context] при входе в контекст участника;напримерв участниках #edit.Затем в индексеmembers#index у меня есть следующий код:

if session[:member_context]
  @search_field = session[:search_field]
  @page = session[:page]
  # toggle out of member context
  session[:member_context] = nil
else
  @search_field = params[:search_field]
  @page = params[:page]
  # record lastest search in case the user subsequently enters the member context
  session[:search_field] = @search_field
  session[:page] = @page
end
@members = Member.where(<use @search_field>).page(@page)
# and render ...

Это отлично работает в моем приложении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top