Pregunta

Tengo algunas fotos que se dividen en las páginas sucesivas a través de plug-in will_paginate. Al abrir una foto y luego regresar a todas las fotos usando un enlace, siempre se vuelve a la primera página (por ejemplo, la foto se muestra en la página 5, se abre la foto, haga clic en un enlace para mostrar todas las fotos y esperar que usted está en página 5 de nuevo, pero que está en la página 1).

Ahora, ¿hay algún método para obtener el número de página a la que pertenece una foto a?

He intentado pasar un parámetro GET, pero esto sólo funciona si el usuario no realiza más acciones (por ejemplo, realizar un comentario, edición de fotos, ecc.).

¿Fue útil?

Solución

page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

En otras palabras. Si una fotografía tiene ID 40 y hay 25 registros antes (suponiendo que algunos registros se han eliminado), con 20 registros por página:

page = (25 / 20) + 1 = 2

Se puede contar el número de registros antes de que el registro seleccionado usando Model.count(:conditions => ['id < ?', record.id], :order => 'id'). La consulta correcta depende de la clasificación de filtro que se aplica a esa mesa cuando se enumeran todos los objetos.

Otros consejos

El número de página depende de los resultados de su búsqueda de máxima. Su búsqueda podría tener 1, 10, o 100 páginas, dependiendo del conjunto de resultados y el número de elementos por página.

Cualquier enlace a "mostrar todas las fotos" podrían contener la información de búsqueda y la paginación, utilizando los parámetros GET como usted ha descrito. O almacenar y recuperar a través de una cookie para que los resultados de búsqueda persisten hasta que los usuarios borra o selecciona una nueva búsqueda.

Aquí hay otra solución: will_paginate sólo utiliza los parámetros de cadena de consulta 'search_field' y 'página'; se puede extraer estos desde los rieles de hash params. Si se mantiene un registro de los que utilizan el estado de sesión, puede volver a aplicar en su código controlador, cuando sea necesario.

Exactamente cómo manejar eso dependerá de su aplicación. En la aplicación que estoy trabajando, el flujo es tal que puedo distinguir entre un contexto general y un contexto miembro. El usuario introduce el contexto miembro de la página de miembros # índice. Así que acaba de establecer la sesión [: member_context] en la entrada al contexto miembro; p.ej. en los miembros # edición. Luego, en el índice de miembros #, tengo el siguiente código:

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

Esto funciona muy bien en mi solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top