Ruby on Rails, pagination et paramètres de filtrage
Je viens de terminer la mise en place d’options de filtrage sur les différents tableaux de classement de l’administration de Typo, pour les billets, les pages, et les pièces jointes.

Une des difficultés était de passer les paramètres de filtrage d’une page à l’autre via la plugin classic_pagination, sans ajouter une quantité considérable de code. Chaque tableau dispose en effet de ses propres filtres, et si on peut retrouver certaines similitudes d’un controller à l’autre, ce n’est pas toujours le cas.
Pour ce faire, j’ajoute un helper nommé params_qsa dans chaque controller à traiter. Ce dernier contiendra l’ensemble des paramètres à ajouter à la requête GET pour effectuer la recherche. Lesdits paramètres sont ensuite traités dans le module de recherche pour éviter les attaques.
def params_qsa
{ 'search[category]' => @search[:category],
'search[user_id]' => @search[:user_id],
'search[published_at]' => @search[:published_at],
'searched[published]' => @search[:published] }
endDans chaque controller à traiter, j’ai déclaré une variable de class @search, qui contient la liste des paramètres envoyés par le formulaire de recherche.
@search = params[:search]Pour finir, je vais utiliser un partial, que j’appellerai en bas de chacun des tableaux, et qui affichera les liens précédent, suivant, et les liens vers les différentes pages.
link_to "Page précédente", :id => pages.current.previous, :params => params_qsa if pages.current.previous
pagination_links pages, {:name => 'id' , :params => params_qsa}
link_to "Page suivante", :id => pages.current.next, :params => params_qsa if pages.current.nextEt voilà, c’est fait. Si vous avez plus propre, je suis évidemment preneur, sachant que je ne suis en aucun cas adepte du refactoring par le vide ;-).
Commentaires
Trackbacks
Les trackbacks sont fermés pour cause de spam.
Passionné d'informatique depuis l'âge de six ans, je travaille en tant que responsable qualité chez blueKiwi Software, éditeur spécialiste des outils collaboratifs en entreprise. Ma double formation en sciences politiques et en informatique me permet de porter un regard particulier sur les problématiques abordées par mon poste.
NiKo about 8 hours later:
Huhu, c’est peu ou prou la même astuce que j’ai utilisé sur Symfonians : http://symfonians.org/browser/trunk/apps/main/modules/applications/actions/actions.class.php#L196
(ne vomis pas, c’est du php ;)
Eric about 11 hours later:
Je n’a pas de solutions mais je suis curieux de savoir ce que tu proposes comme choix pour les dates. Je me suis toujours retenu de faire des filtres simples pour les dates, parce que je n’ai jamais rien trouvé qui cadre avec au moins la moitié des cas d’utilisations :
J’ai eu beau chercher et demander à des gens comment ils cherchent (hors contexte informatique, pour ne pas mélanger avec le simple “d’ordinaire c’est comme ça”), je n’ai pas pu écarter un des quatre cas ni en mettre un particulièrement en avant.
Qu’as tu priviligié et pourquoi ?
Frédéric de Villamil about 12 hours later:
@Nicolas : j’ai un instant cru que c’était du Perl2EE, un mélange de Perl (beurk) et de J2EE. Mais non…
Eric : J’ai opté pour un filtrage par mois pour plusieurs raisons :
Enfin je doute que ce mode de filtrage soit vraiment utilisé. En tout cas, je ne l’utilise pas, sauf à des fins statistiques. Simplement, les gens risquent de s’étonner s’il n’est pas présent.