Une étendue est un sous-ensemble d'une collection. Cela semble compliqué? Ça ne l'est pas. Imagine ça:
Vous avez des utilisateurs. Désormais, certains de ces utilisateurs sont abonnés à votre newsletter. Vous avez marqué ceux qui reçoivent une newsletter en ajoutant un champ à la base de données des utilisateurs (user.subscribed_to_newsletter = true). Naturellement, vous souhaitez parfois obtenir les utilisateurs qui sont abonnés à votre newsletter.
Vous pouvez, bien sûr, toujours faire ceci:
User.where(subscribed_to_newsletter: true).each do #something
Au lieu de toujours écrire ceci, vous pouvez cependant faire quelque chose comme ceci.
#File: users.rb
class User < ActiveRecord::Base
scope :newsletter, where(subscribed_to_newsletter: true)
#yada yada
end
Si vous utilisez Rails 4 ou plus récent , procédez comme suit:
#File: users.rb
class User < ActiveRecord::Base
scope :newsletter, -> { where(subscribed_to_newsletter: true) }
#yada yada
end
Cela vous permet d'accéder à vos abonnés en faisant simplement ceci:
User.newsletter.each do #something
Ceci est un exemple très simple, mais en général, les portées peuvent être des outils très puissants pour faciliter votre travail.
Consultez ce lien: Description de l'API