복붙노트

[RUBY-ON-RAILS] 레일의 범위 / named_scope은 무엇인가?

RUBY-ON-RAILS

레일의 범위 / named_scope은 무엇인가?

나는 최근에 인턴십을 시작했습니다. 내 고용주가 사용하는 레일에 루비, 나는 이해 찾아 볼 필요가 나는 자주 새로운 구문을 발생합니다. 나는 named_scope의 좋은 설명은 주변 검색 좀했지만, 내가 주로 그것에 대한 높은 평가가 아니라 직선 정의 또는 도입을주는 게시물을 블로그 지금까지 발견했습니다.

정확히 레일에 루비에 named_scope (지금은 단순히 범위라고합니다) 란 무엇입니까?

해결법

  1. ==============================

    1.스코프는 집합의 부분 집합이다. 사운드는 복잡? 그것은 아니다. 이 상상 :

    스코프는 집합의 부분 집합이다. 사운드는 복잡? 그것은 아니다. 이 상상 :

    당신은 사용자가 있습니다. 이제, 그 사용자 중 일부는 당신의 뉴스 레터에 가입. 당신은 사용자 데이터베이스 (user.subscribed_to_newsletter = TRUE)에 필드를 추가하여 뉴스 레터를받을 사람을 표시했다. 당연히, 당신은 때때로 당신의 뉴스 레터에 가입하는 사용자를 싶어.

    당신은 물론, 항상이 작업을 수행 할 수 있습니다 :

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

    대신 항상 당신이 할 수이 글을 쓰는, 그러나, 이런 일을한다.

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

    당신은 레일 4 이상을 사용하는 경우,이 작업을 대신 수행

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

    이것은 단순히 이렇게하여 가입자에 액세스 할 수 있습니다 :

    User.newsletter.each do #something
    

    이것은 매우 간단한 예이지만, 일반적으로 범위에서 쉽게 작업에 매우 강력한 도구가 될 수 있습니다.

    이 링크를 체크 아웃 : API 설명

  2. ==============================

    2.활성 레코드 범위는 클래스 메소드처럼하지만 그들은 당신이 그것에 다른 범위 또는 활성 기록 쿼리 메소드를 호출 할 수 있다는 것을 의미 관계 오브젝트를 돌려줍니다.

    활성 레코드 범위는 클래스 메소드처럼하지만 그들은 당신이 그것에 다른 범위 또는 활성 기록 쿼리 메소드를 호출 할 수 있다는 것을 의미 관계 오브젝트를 돌려줍니다.

    예를 들어, 당신이 언급 한 범위의 방법을 아래로 좀비 모델 (좀비 테이블)이있는 경우,

    class Zombie
      scope :rotting, -> { where(rotting: true) }
      scope :fresh, -> { where('age < ?', 25) }
      scope :recent, -> { order(created_at: :desc) }
    end
    

    그리고 당신은 전화

    Zombie.rotting.fresh.recent.limit(3)
    

    그것은 SQL에서 아래로 변환

    select "zombies.*" from "zombies" where "zombies"."rotting" = 't' and (age<20) order by create_at desc limit 3
    

    실시 예 4는 상기 레일 구문에 기초

  3. ==============================

    3.세부 사항을 대해 이해하는 가장 좋은 방법은 API 문서로 이동하는 것입니다.

    세부 사항을 대해 이해하는 가장 좋은 방법은 API 문서로 이동하는 것입니다.

    당신은 자세한 설명과 방법 우리가 범위를 사용할 수를 얻을 수 있습니다.

    범위의 API 문서

  4. ==============================

    4.왜 그들을 사용?

    왜 그들을 사용?

    범위 지정은 협회 개체 또는 모델의 메소드 호출로 참조 할 수 있습니다 (이 길거나 가장 자주 사용되는 쿼리에 대한 바로 가기로 간주 될 수있다) 일반적으로 사용되는 쿼리를 지정할 수 있습니다. 이러한 범위로, 당신은 이전에, 조인 포함한다 등 포함 모든 방법을 사용할 수 있습니다. 모든 범위의 방법은 호출 할 수있는 (예 : 다른 범위 등) 추가 방법을 허용 것이다 액티브 :: 관계 객체를 반환합니다.

    간단한 범위를 정의하려면, 우리는 우리가이 범위가 호출 될 때 실행하고자하는 쿼리를 전달 클래스 내부의 범위 방법을 사용하십시오

    class Article < ActiveRecord::Base
      scope :published, -> { where(published: true) }
    end
    

    이것이 바로 클래스 메소드를 정의와 동일하며, 이는 사용하는 것은 개인적인 취향의 문제이다 :

    class Article < ActiveRecord::Base
      def self.published
        where(published: true)
      end
    end
    

    예를 들어 전체 설명을 다음 링크를 클릭하십시오. 내가 당신을 도울 바랍니다.

    http://guides.rubyonrails.org/active_record_querying.html

  5. ==============================

    5.이제 상상 :

    이제 상상 :

    당신은 범위를 사용하여 사람들이 그 특정 클래스를 얻을 수 있습니다!

    Person.red_hair.cricket ## finds all people with red hair who play cricket
    Person.red_hair ## finds all people with red hair
    Person.cricket ## finds all people who play cricket.
    

    지금은 너무 열심히했다 아니었다?

  6. from https://stackoverflow.com/questions/4869994/what-is-scope-named-scope-in-rails by cc-by-sa and MIT license