[RUBY-ON-RAILS] 레일의 범위 / named_scope은 무엇인가?
RUBY-ON-RAILS레일의 범위 / named_scope은 무엇인가?
나는 최근에 인턴십을 시작했습니다. 내 고용주가 사용하는 레일에 루비, 나는 이해 찾아 볼 필요가 나는 자주 새로운 구문을 발생합니다. 나는 named_scope의 좋은 설명은 주변 검색 좀했지만, 내가 주로 그것에 대한 높은 평가가 아니라 직선 정의 또는 도입을주는 게시물을 블로그 지금까지 발견했습니다.
정확히 레일에 루비에 named_scope (지금은 단순히 범위라고합니다) 란 무엇입니까?
해결법
-
==============================
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.활성 레코드 범위는 클래스 메소드처럼하지만 그들은 당신이 그것에 다른 범위 또는 활성 기록 쿼리 메소드를 호출 할 수 있다는 것을 의미 관계 오브젝트를 돌려줍니다.
활성 레코드 범위는 클래스 메소드처럼하지만 그들은 당신이 그것에 다른 범위 또는 활성 기록 쿼리 메소드를 호출 할 수 있다는 것을 의미 관계 오브젝트를 돌려줍니다.
예를 들어, 당신이 언급 한 범위의 방법을 아래로 좀비 모델 (좀비 테이블)이있는 경우,
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.세부 사항을 대해 이해하는 가장 좋은 방법은 API 문서로 이동하는 것입니다.
세부 사항을 대해 이해하는 가장 좋은 방법은 API 문서로 이동하는 것입니다.
당신은 자세한 설명과 방법 우리가 범위를 사용할 수를 얻을 수 있습니다.
범위의 API 문서
-
==============================
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.이제 상상 :
이제 상상 :
당신은 범위를 사용하여 사람들이 그 특정 클래스를 얻을 수 있습니다!
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.
지금은 너무 열심히했다 아니었다?
from https://stackoverflow.com/questions/4869994/what-is-scope-named-scope-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] PG 보석을 설치할 수 없습니다 (0) | 2020.02.27 |
---|---|
[RUBY-ON-RAILS] 임베디드 HTML과 LINK_TO 사용 (0) | 2020.02.27 |
[RUBY-ON-RAILS] 종이 클립 :: 오류 :: 레일과 MissingRequiredValidatorError 4 (0) | 2020.02.27 |
[RUBY-ON-RAILS] 레일 / 레일 콘솔을 사용하여 객체 어떻게 목록 데이터베이스 테이블에? (0) | 2020.02.27 |
[RUBY-ON-RAILS] 어떻게 우분투 보석을 사용합니까? (0) | 2020.02.27 |