Um escopo é um subconjunto de uma coleção. Parece complicado? Não é. Imagina isto:
Você tem usuários. Agora, alguns desses usuários estão inscritos em sua newsletter. Você marcou aqueles que recebem um boletim informativo adicionando um campo ao Banco de dados de usuários (user.subscribed_to_newsletter = true). Naturalmente, às vezes você deseja obter os usuários que estão inscritos no seu boletim informativo.
Você poderia, é claro, sempre fazer isso:
User.where(subscribed_to_newsletter: true).each do #something
Em vez de sempre escrever isso, você poderia, entretanto, fazer algo assim.
#File: users.rb
class User < ActiveRecord::Base
scope :newsletter, where(subscribed_to_newsletter: true)
#yada yada
end
Se você estiver usando Rails 4 ou mais recente , faça o seguinte:
#File: users.rb
class User < ActiveRecord::Base
scope :newsletter, -> { where(subscribed_to_newsletter: true) }
#yada yada
end
Isso permite que você acesse seus assinantes simplesmente fazendo o seguinte:
User.newsletter.each do #something
Este é um exemplo muito simples, mas em geral os escopos podem ser ferramentas muito poderosas para facilitar o seu trabalho.
Confira este link: Descrição da API