Frage

Ich habe einige Fotos, die auf aufeinanderfolgenden Seiten über das Will_Paginate -Plugin aufgeteilt werden. Wenn Sie ein Foto öffnen und dann mit einem Link zu allen Fotos zurückkehren, kehren Sie immer zur ersten Seite zurück (z. B. das Foto wird auf Seite 5 angezeigt. Öffnen Sie das Foto, klicken auf einen Link, um alle Fotos anzuzeigen und zu erwarten, dass Sie sich befinden Seite 5 wieder, aber Sie sind auf Seite 1).

Gibt es nun eine Methode, um die Seitennummer zu erhalten, zu der ein Foto gehört?

Ich habe versucht, einen GET -Parameter zu übergeben, aber dies funktioniert nur, wenn der Benutzer keine weiteren Aktionen ausführt (zB posten Sie einen Kommentar, Foto bearbeiten, ecc.).

War es hilfreich?

Lösung

page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

Mit anderen Worten. Wenn Ihr Foto ID 40 enthält und 25 Datensätze zuvor (vorausgesetzt werden einige Datensätze gelöscht wurden) mit 20 Datensätzen pro Seite:

page = (25 / 20) + 1 = 2

Sie können die Anzahl der Datensätze vor dem ausgewählten Datensatz verwenden Model.count(:conditions => ['id < ?', record.id], :order => 'id'). Die richtige Abfrage hängt davon ab, welcher Sortierfilter Sie auf diese Tabelle anwenden, wenn Sie alle Objekte auflisten.

Andere Tipps

Die Seitenzahl ist in hohem Maße von den Ergebnissen Ihrer Suche abhängig. Ihre Suche kann je nach Ergebnissatz und der Anzahl der Elemente pro Seite 1, 10 oder 100 Seiten haben.

Jeder Link zu "Alle Fotos anzeigen" kann die Such- und Paginationsinformationen enthalten, wobei die GET -Parameter wie Sie beschrieben sind. Oder über ein Cookie speichern und abrufen, damit die Suchergebnisse bestehen bleiben, bis die Benutzer eine neue Suche beseitigen oder auswählen.

Hier ist eine andere Lösung: Will_Paginate verwendet nur Abfragebringsparameter 'Search_field' und 'Page'; Sie können diese aus den Rails Params Hash extrahieren. Wenn Sie diejenigen verfolgen, die die Sitzungsstatus verwenden, können Sie sie bei Bedarf in Ihrem Controller -Code erneut aufwenden.

Genau wie Sie verwalten, hängt dies von Ihrer Anwendung ab. In der App, an der ich arbeite, ist der Fluss so, dass ich zwischen einem allgemeinen Kontext und einem Mitgliedskontext unterscheiden kann. Der Benutzer gibt den Mitgliedskontext von der Seite der Mitglieds -# -Index ein. Also habe ich die Sitzung [: member_context] im Eintrag in den Mitgliedskontext festgelegt. zB in Mitgliedern#bearbeiten. Dann habe ich im Mitglieder#Index den folgenden Code:

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

Das funktioniert in meiner Bewerbung hervorragend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top