Utilizzando searchlogic con will_paginate
-
21-09-2019 - |
Domanda
Modifica Sembra che ho capito -. Ho dovuto chiamare impaginare dopo la chiamata a all
da Searchlogic
Sto cercando di utilizzare entrambi questi strumenti per consentire agli utenti di cercare i contatti e restituire un elenco impaginato (o l'intero elenco impaginato se non entrano alcun criterio di ricerca). Comunque io sono sicuro del modo corretto di loro catena insieme, e quello che sto cercando è mi dà errori.
Qui è il mio controller:
class ContactsController < ApplicationController
def index
@search = Contact.search(params[:search]).paginate(:page => params[:page])
@contacts, @contacts_count = @search.all, @search.count
end
end
Questo mi dà la Undefined method 'all' for WillPaginate
errore. Rimozione del tutto mi dà un errore perché la vista è alla ricerca di un percorso che ha la parola "contatto" 20 volte (per esempio contact_contact_contact..._path
), presumibilmente perché il default "per pagina" è 20.
Che cosa sto facendo di sbagliato? Mi piacerebbe avere la ricerca, ordinamento e impaginazione tutto in questa pagina.
Soluzione
Mi stavo confuso da questo. Si vuole fare quanto segue:
class ContactsController < ApplicationController
def index
@search = Contact.search(params[:search])
@contacts = @search.paginate(:page => params[:page])
end
end
Secondo lei basta chiamare @ contacts.total_entries per ottenere il conteggio totale (will_paginate aggiunge automaticamente che in).
Non appena si chiami .paginate si innesca la query. Quindi, quando si, anche se si pensa che si sta impostando @search a un oggetto Searchlogic, non sei. Si sta impostando ad una matrice WillPaginate che non ha alcun metodo di .all che si può chiamare.