Domanda

Ho alcune foto che sono divisi sulle pagine successive attraverso plug will_paginate. Quando si apre una foto e poi tornare a tutte le foto utilizzando un collegamento, si torna sempre alla prima pagina (ad esempio, la foto viene visualizzata a pagina 5, si apre la foto, fare clic su un link per visualizzare tutte le foto e si aspettano che siete su pagina 5 di nuovo, ma si è a pagina 1).

Ora, c'è qualche metodo per ottenere il numero di pagina a cui appartiene una foto a?

Ho cercato di passare un parametro GET, ma questo funziona solo se l'utente non esegue alcuna più azioni (ad esempio pubblicare un commento, modifica foto, ecc.).

È stato utile?

Soluzione

page = (number_of_records_before_RECORD / number_of_records_per_page) + 1

In altre parole. Se la foto ha ID 40 e ci sono 25 record prima (supponendo che alcuni record sono stati cancellati), con 20 record per pagina:

page = (25 / 20) + 1 = 2

È possibile contare il numero di record prima del record selezionato utilizzando Model.count(:conditions => ['id < ?', record.id], :order => 'id'). La query giusta dipende da quale l'ordinamento del filtro si applica a quel tavolo quando si elencano tutti gli oggetti.

Altri suggerimenti

Il numero di pagina è fortemente dipendente dai risultati della ricerca. La ricerca potrebbe avere 1, 10, o 100 pagine a seconda del set di risultati e il numero di elementi per pagina.

Qualsiasi link a "mostrare tutte le foto" potrebbe contenere le informazioni di ricerca e di impaginazione, utilizzando i parametri GET come hai descritto. O memorizzare e recuperare tramite un cookie in modo che i risultati della ricerca persistono fino a quando gli utenti cancella o seleziona una nuova ricerca.

Ecco un'altra soluzione: will_paginate solo utilizza i parametri di stringa di query 'search_field' e 'pagina'; è possibile estrarre questi dalle guide params hash. Se si tiene traccia di coloro che usano lo stato della sessione, è possibile riapplicare nel codice del controller, in caso di necessità.

Esattamente come gestire che dipenderà dalla vostra applicazione. Nell'applicazione su cui sto lavorando, il flusso è tale che posso distinguere tra un contesto generale e un contesto membro. L'utente entra nel contesto membro dalla pagina Membro # indice. Così ho appena impostato sessione [: member_context] sull'entrata al contesto socio; per esempio. nei membri # modifica. Poi, l'indice membri #, ho il seguente codice:

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

Questa grande opera nella mia applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top