Question

J'ai quelques photos qui sont divisés sur les pages successives par plug-in will_paginate. Lorsque vous ouvrez une photo, puis revenez à toutes les photos en utilisant un lien, vous revenez toujours à la première page (par exemple, la photo est affichée à la page 5, vous ouvrez la photo, cliquer sur un lien pour afficher toutes les photos et attendre à ce que vous êtes page 5 nouveau, mais vous êtes à la page 1).

, est-il une méthode pour obtenir le numéro de la page à laquelle une photo appartient?

J'ai essayé de passer un paramètre GET, mais cela ne fonctionne que si l'utilisateur ne fonctionne pas plus d'actions (par exemple après un commentaire, photo modifier, ecc.).

Était-ce utile?

La solution

page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

En d'autres termes. Si votre photo a ID 40 et il y a 25 dossiers avant (en supposant que certains dossiers ont été supprimés), avec 20 enregistrements par page:

page = (25 / 20) + 1 = 2

Vous pouvez compter le nombre d'enregistrements avant l'enregistrement sélectionné à l'aide Model.count(:conditions => ['id < ?', record.id], :order => 'id'). La requête droite dépend du filtre de tri que vous appliquez à cette table lorsque la liste de tous les objets.

Autres conseils

Le numéro de page dépend en grande partie des résultats de votre recherche. Votre recherche peut avoir 1, 10 ou 100 pages en fonction du jeu de résultats et le nombre d'éléments par page.

Tout lien « montrer toutes les photos » pourraient contenir les informations de recherche et de mise en page, en utilisant les paramètres GET que vous avez décrit. Ou stocker et récupérer via un cookie afin que les résultats de la recherche persistent jusqu'à ce que les utilisateurs déblaie ou sélectionne une nouvelle recherche.

Voici une autre solution: will_paginate juste utilise « page » paramètres de chaîne de requête de la search_field 'et; vous pouvez extraire ces de hachage des rails. Si vous garder une trace de ceux qui utilisent l'état de session, vous pouvez les appliquer de nouveau dans votre code de contrôleur, en cas de besoin.

Exactement comment vous gérez cela dépendra de votre application. Dans l'application, je travaille sur, le flux est telle que je peux distinguer un contexte général et un contexte membre. L'utilisateur entre dans le contexte de membre du membre # page d'index. Je me suis donc juste session [: member_context] à l'entrée dans le contexte membre; par exemple. dans les membres de modifier #. Puis, dans l'index des membres de #, j'ai le code suivant:

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

Cela fonctionne très bien dans ma demande.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top