2009-10-14 4 views
2

EDIT On dirait que je l'ai compris - j'ai dû appeler paginate après l'appel à all de Searchlogic. J'essaie d'utiliser ces deux outils pour permettre aux utilisateurs de rechercher des contacts et de retourner une liste paginée (ou toute la liste paginée s'ils n'entre aucun critère de recherche). Cependant, je ne suis pas sûr de la façon appropriée de les enchaîner, et ce que j'essaie c'est de me donner des erreurs.Utiliser searchlogic avec will_paginate

Voici mon contrôleur:

class ContactsController < ApplicationController 
    def index 
    @search = Contact.search(params[:search]).paginate(:page => params[:page]) 
    @contacts, @contacts_count = @search.all, @search.count 
    end 
end 

Cela me donne l'erreur Undefined method 'all' for WillPaginate. Supprimer le tout me donne une erreur parce que la vue recherche un chemin qui a le mot "contact" 20 fois (par exemple contact_contact_contact..._path), sans doute parce que le défaut "par page" est 20.

Qu'est-ce que je fais mal? Je voudrais avoir la recherche, la commande et la pagination tout sur cette page.

Répondre

6

Je commençais à être confus par cela aussi. Vous souhaitez effectuer les opérations suivantes:

class ContactsController < ApplicationController 
    def index 
    @search = Contact.search(params[:search]) 
    @contacts = @search.paginate(:page => params[:page]) 
    end 
end 

Selon vous simplement appeler @ contacts.total_entries pour obtenir le nombre total (will_paginate ajoute automatiquement que). Dès que vous appelez .paginate, la requête est déclenchée dès que vous appelez .paginate. Ainsi, même si vous pensez que vous définissez @search sur un objet Searchlogic, vous ne l'êtes pas. Vous le définissez sur un tableau WillPaginate qui n'a aucune méthode .all que vous pouvez appeler.

+0

Excellent conseil. Merci. – Chalkers