• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 23/10/2018

Les scopes

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

J’introduis ce chapitre par quelques commandes à faire dans votre rails console.

Book.create title: "Mangez baroque", category_id: 1
Book.create title: "XKCD", category_id: 2

books = Book.where(category_id: 1)
puts books.first.title
puts books.last.title

Ces commandes créent deux livres, l’un dans la catégorie 1 (France) et l’autre dans la 2 (Monde). Puis la variable books reçoit un tableau de tous les livres dont la catégorie est 1. Le tout se termine par l’affichage du titre du premier et dernier livre de cette catégorie.

Les nouveautés sont first, last mais surtout where, qui permet de faire des recherches. J’aurais également pu faire ceci :

books = Category.where(name: "France").first.books

Même s’il n’y a qu’une catégorie « France », where retourne toujours un tableau, d’où la nécessité du first qui le suit.

Toutes ces fonctions sont des scopes. À partir d’un ensemble – de livres, de catégories, etc. –, les scopes « réduisent le périmètre ». À telle catégorie, telle condition, au premier ou dernier livre, etc.

Il est possible, dans les modèles, de créer vos propres scopes. Illustration :

# app/models/book.rb
class Book < ActiveRecord::Base
  belongs_to :category

  # ...

  scope :french, -> { where(category_id: 1) }
end

Comparez maintenant ces deux commandes dans votre rails console :

Book.where(category_id: 1)
Book.french

C’est la même chose ! Il y a plusieurs intérêts à utiliser les scopes :

  • c’est plus rapide d’écrire Book.french que Book.where(...)

  • si un collègue lit votre code, il comprendra tout de suite ce que veut dire Book.french

Voilà pour les modèles ! Je vous invite à les enrichir autant que possible d’associations, validations et scopes. Par exemple, faites un scope pour les livres anglais.

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