Страница предмета и will_paginate

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

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

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

Ответы на вопрос(3)

Решение Вопроса
page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

ыло 25 записей (при условии, что некоторые записи были удалены), по 20 записей на странице:

page = (25 / 20) + 1 = 2

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

 Shadwell30 июн. 2009 г., 22:03
Также стоит, если возможно, выполнить подсчет, чтобы найти текущую страницу в той же транзакции, что и запрос для поиска элементов на странице - в противном случае пользователь может оказаться на странице, на которой нет фотографии, которой он был ожидая, потому что количество фотографий изменилось между запросами.
 Shadwell30 июн. 2009 г., 22:00
Я бы не подумал, что это будет огромный успех. Когда вы используете библиотеку разбиения на страницы, она подсчитывает все, что вы делаете, чтобы получить общее количество страниц. Если столбец, по которому вы заказываете, проиндексирован правильно, тогда не должно быть слишком больно получать аналогичный счетчик для поиска текущей страницы.
 collimarco30 июн. 2009 г., 21:23
Это может быть решением, но мне интересно, почему этот код не реализован по умолчанию в плагине. Возможно, потому что не имеет смысла делать то, что я сказал с точки зрения производительности ..
 Simone Carletti30 июн. 2009 г., 21:55
Потому что это не имеет смысла для широкой аудитории. Это не идеальное решение, а просто обходной путь для ваших конкретных потребностей. Кроме того, will_paginate предоставляет возможности разбивки на страницы, а не дополнительные функции ActiveRecord.
 Simone Carletti30 июн. 2009 г., 22:22
Я согласен, Шадвелл, вот почему я прокомментировал: «Это не идеальное решение, а просто обходной путь для ваших конкретных потребностей» и одна из лучших причин, почему это не имеет смысла в will_paginate. Если вам нужна такая функция, вы должны закодировать ее так, чтобы она наилучшим образом соответствовала вашему приложению и требованиям.

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

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

 collimarco30 июн. 2009 г., 20:52
Проблема в том, что когда пользователь временно покидает страницу с фотографиями (например, чтобы изменить ее), а затем пытается вернуться обратно, чтобы показать все фотографии, он всегда возвращается на первую страницу :( Хотя я не думаю, что использование файлов cookie - это хорошая вещь для SEO.
 Terry G Lorber30 июн. 2009 г., 21:09
@ collimarco Если вы хотите повторно использовать параметры поиска и нумерации страниц между запросами, вам нужно их где-то сохранить. Обычно для этого нужны куки. Не уверен, какое влияние это окажет на SEO.
 collimarco30 июн. 2009 г., 21:38
Я видел, что многие сайты с фотографиями (например, deviantart.com) используют файлы cookie, чтобы позволить пользователям вернуться назад.

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

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

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 ...

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

Ваш ответ на вопрос