What is scope/named_scope in rails?

前端 未结 5 1068
耶瑟儿~
耶瑟儿~ 2020-12-02 04:08

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

5条回答
  •  忘掉有多难
    2020-12-02 05:04

    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

提交回复
热议问题