• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Ce cours est en vidéo.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Mis à jour le 23/10/2018

La pagination avec Kaminari

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

La pagination est le fait d’afficher un ensemble de données sur plusieurs pages. Par exemple, les messages d’un forum ou les articles d’un blog sont souvent paginés.

Il existe une gem pour gérer cela avec Rails. Pour la trouver, sur Google, tapez « rails pagination ». Vous trouverez, entre autres, la gem Kaminari. La vaste majorité du temps, les gems se trouvent sur le site Github. Allez sur https://github.com/amatsuda/kaminari.

La première partie de la page est le code de la gem, que vous pouvez ignorer. Vous avez ensuite les instructions d’utilisation, toujours écrites au même endroit et en anglais. Et souvent avec la même structure (présentation, installation, configuration, utilisation…). Je les indique à ma façon ici :

  • Ajoutez gem 'kaminari' à la fin de votre Gemfile

  • Faites bundle install (bundle tout court a le même effet)

  • Dans votre console rails, faites « Book.page(1) »

Book.page(1) donne les 25 premiers livres. Book.page(2) les 25 suivants, etc. Nous n’avons pas assez de livres pour faire des tests corrects. Voici une façon d’en créer un certain nombre dans la rails console :

60.times do |i|
  Book.create title: "Livre n°#{i}"
end

Voyez les 60 livres se créer sous vos yeux ! Refaites alors Book.page(1), puis 2, puis 3, puis 4. La page 4 sera vide.

Maintenant que tout ceci fonctionne dans la console, modifiez votre contrôleur :

# app/controllers/books_controller.rb
class BooksController < ApplicationController
  def index
    @books = Book.page(1)
  end
  # ...
end

Redémarrez votre serveur s’il était déjà lancé – c’est nécessaire après chaque ajout de gem. Maintenant http://localhost:3000/books n’affichera que les 25 premiers livres. Pour afficher la liste des pages disponibles, Kaminari met à votre disposition le helper paginate :

# app/views/books/index.html.erb
<h1>Liste des livres</h1>
<%= paginate @books %>
<% @books.each do |book| %>
  <p><%= book_link book %></p>
<% end %>

Trois liens sont alors affichés, pour chacune des trois pages. L’adresse de la page se modifie pour refléter la page en cours. Par exemple : http://localhost:3000/books?page=2. Mais ce sont toujours les premiers livres qui sont affichés. Normal : notre contrôleur n’utilise pas encore le paramètre page=2. Il n'y a qu'une ligne à modifier :

# app/controllers/books_controller.rb
class BooksController < ApplicationController
  def index
    @books = Book.page(params[:page])
  end

  # ...
end

Et là, les liens de la vue sont raccords avec le code du contrôleur qui prend en compte la page demandée. Kaminari comprend tout seul que, lorsqu’aucune page spécifique n’est demandée, c’est la première qu’il faut afficher. Testez votre nouveau code sur http://localhost:3000/books : tout fonctionne !

Pour afficher les livres 10 par 10 plutôt que 25 par 25, modifiez votre contrôleur :

# app/controllers/books_controller.rb
class BooksController < ApplicationController
  def index
    @books = Book.page(params[:page]).per(10)
  end

  # ...
end

Voilà, vous venez d’installer une nouvelle gem et d’utiliser des fonctionnalités que n’avait pas Rails !

Exemple de certificat de réussite
Exemple de certificat de réussite