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 ;-).
3 commentaires sur Ruby on Rails, pagination et paramètres de filtrage »
-
NiKo le 30 avril 2008 à 07h50
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 le 30 avril 2008 à 11h01
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 :
- par mois ? janvier 2008, février 2008, … ce n’est pas idiot pour un blog
- par proximité ? moins d’une semaine, moins d’un mois, moins de trois mois … c’est souvent comme ça qu’on se rappelle d’un vieux contenu (et pas par son mois)
- par éloignement ? plus d’une semaine, plus d’un mois, plus de trois mois … si on fonctionne par proximité on doit aussi certainement souvent fonctionner par éloignement
- par période ? entre une semaine et un mois, entre un et trois mois …. encore une méthode utile
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 le 30 avril 2008 à 11h56
@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 : * Même si tu blogues depuis 4 ans, la taille de la liste reste raisonnable. * La pagination se faisant par 20 billets, cela restreint le nombre de pages pour un filtrage par mois, même si tu publies énormément. * Si tu cherches du contenu précis, il y a une recherche fulltext.
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.
Réagir à Ruby on Rails, pagination et paramètres de filtrage
Trackbacks sur Ruby on Rails, pagination et paramètres de filtrage
Les trackbacks sont fermés pour cause de spam.
