Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is scope/named_scope in rails?

I've recently started an internship. My employer uses ruby on rails, and I frequently encounter new syntax that I need to look up to understand. I've googled around for a good explanation of named_scope, but what I've found so far is mostly blog posts giving high praise for it, rather a straight definition or introduction.

What exactly is named_scope (now simply called scope) in ruby on rails?

like image 937
Ziggy Avatar asked Feb 02 '11 01:02

Ziggy


1 Answers

A scope is a subset of a collection. Sounds complicated? It isn't. Imagine this:

You have Users. Now, some of those Users are subscribed to your newsletter. You marked those who receive a newsletter by adding a field to the Users Database (user.subscribed_to_newsletter = true). Naturally, you sometimes want to get those Users who are subscribed to your newsletter.

You could, of course, always do this:

User.where(subscribed_to_newsletter: true).each do #something 

Instead of always writing this you could, however, do something like this.

#File: users.rb class User < ActiveRecord::Base   scope :newsletter, where(subscribed_to_newsletter: true)   #yada yada end 

If you're using Rails 4 or newer, do this instead:

#File: users.rb class User < ActiveRecord::Base   scope :newsletter, -> { where(subscribed_to_newsletter: true) }   #yada yada end 

This allows you to access your subscribers by simply doing this:

User.newsletter.each do #something 

This is a very simple example but in general scopes can be very powerful tools to easy your work.

Check out this link: API Description

like image 89
Michael Schäfermeyer Avatar answered Oct 28 '22 21:10

Michael Schäfermeyer