J'ai remarqué que des joyaux de pagination comme mislav-will_paginate
sont assez populaires. Est-ce parce que Rails ne dispose pas d'une solution de pagination intégrée ou parce que la solution intégrée n'est pas très bonne ?
Réponses
Trop de publicités?Dans Rails 2.0, la capacité de pagination d'ActionController a été supprimée et transformée en un plugin pour la rétrocompatibilité appelé "classic_pagination". Cependant, d'après mes recherches pour trouver une solution de pagination pour moi-même, le consensus semble être que l'utilisation de "classic_pagination" n'est pas optimale.
Après avoir regardé quelques podcasts et après plusieurs recommandations, j'ai choisi d'essayer le will_paginate et je n'ai pas regardé en arrière. Il est rapide, facile à utiliser et bien entretenu.
Je crois que même V2 de Searchlogic recommande son utilisation.
Si vous utilisez Rails 3, le plugin Kaminari sera très pratique pour la pagination. Github Railscasts
Rails intègre la pagination, mais il s'agit d'un module simple qui ne convient pas à tous les besoins. À moins que vous n'ayez des besoins spécifiques en matière de pagination, il devrait convenir à la plupart des usages.
Voici un bon article sur la façon d'utiliser la pagination dans Rails.
Je recommande searchlogic . Il est doté d'un système de pagination intégré et de nombreuses autres fonctionnalités intéressantes.
- Filtrage facile
- Pagination
- Triage
Et pour tous ces gentils assistants.
Le code en dit plus que des milliers de mots ( Ne vous laissez pas déconcerter par l'exemple HAML, vous pouvez utiliser des modèles erb normaux si vous les préférez, le code et la structure sont les mêmes. ) :
Contrôleur :
def index
@search = User.new_search(params[:search])
@users, @users_count = @search.all, @search.count
end
La pagination dans la vue :
== Per page: #{per_page_select}
== Page: #{page_select}
Trier comme/par en vue :
- unless @users_count.zero?
%table
%tr
%th= order_by_link :account => :name
%th= order_by_link :first_name
%th= order_by_link :last_name
%th= order_by_link :email
- @users.each do |user|
%tr
%td= user.account? ? user.account.name : "-"
%td= user.first_name
%td= user.last_name
%td= user.email
Des filtres faciles, simples et rapides :
- form_for @search do |f|
- f.fields_for @search.conditions do |users|
= users.text_field :first_name_contains
= users.date_select :created_after
- users.fields_for users.object.orders do |orders|
= orders.select :total_gt, (1..100)
= f.submit "Search"
Et tout fonctionne ensemble, donc changer une page et ensuite le tri, et ajouter un filtre fonctionne sans perdre aucun des autres paramètres :).
Tout ce dont vous avez besoin se trouve dans votre environment.rb :
config.gem "searchlogic"
et l'installer avec : rake gems:install
Consultez également le exemple en ligne