[스코프란]
- 자주 사용하는 쿼리메서드를 사용하기 간편하게 하는 방법, 하나의 예약어로 묶은 다음, 예약어를 호출하여 사용하는 방법
- 또는 쿼리메서드를 사용하여 레코드 작업 시 쿼리메서드에 기본적으로 설정하고싶은 설정사항을 넣어두는 방법
[스코프 종류]
- named scope : 자주 사용하는 쿼리메서드를 사용하기 간편하게 하는 방법
- default scope : 테이블 레코드 작업(모델 쿼리메서드)을 할 시에 기본적으로 적용받는 설정을 저장함, 수정/제거 작업 이외에도 생성에도 영향을 미침
[스코프 사용하기]
- named scope
1) 적용하고싶은 모델 클래스 파일을 연다(app > models > 적용하고싶은 모델클래스 이름.rb)
2) scope :스코프이름, -> { 적용할 쿼리(ActiveRecord::Relation을 반환해야함 - find, find_by 등은 사용x) }
3) 사용하기
- 적용하고자 하는 컨트롤러 파일을 연다 -> 모델클래스명.스코프이름 -> 스코프 적용해두었던 쿼리메서드가 동작함
- 병합사용 가능함 : 두개 이상의 스코프를 같이 사용하면 쿼리문에 AND가 붙음(AND로 연결)
- 파라미터를 받아서 사용 가능함
- 일반 쿼리메서드와 혼용 가능함
예시) scope :what, -> { select(:user_name, :user_num) }
4-1) 응용해서 사용하기 - 병합해서 사용하기
- 모델 클래스명 - Book
- scope :what, -> { select(:title, :price)}
- scope :cheap, -> { order(price: :desc) }
- scope :best5, -> { cheap.limit(5) }
- 컨트롤러 사용 : Book.what.best5 - best5는 limit으로 chain 되어있어서 실제 동작은 what -> cheap -> best5 순서로 동작을 한다.
4-2) 응용해서 사용하기 - 파라미터 받기
- scope :what_category, -> (category) { where("category == ?", category) }
- 컨트롤러 사용 : 모델클래스명.스코프이름(파라미터) -> Book.what_category("역사")
- default scope
1) 적용하고싶은 모델 클래스 파일을 연다(app > models > 적용하고싶은 모델클래스 이름.rb)
사용하기1) default_scope { 적용할 쿼리(ActiveRecord::Relation을 반환해야함 - find, find_by 등은 사용x) }
사용하기2) 사용방법 1에서 적용하는 쿼리가 복잡할 경우 메서드 형태로 정의가능하다.
- 메서드명 : self.default_scope - self는 모델 클래스의 객체를 뜻함, 각 객체(현 클래스)에 대한 default_scope
- 사용하기
def self.default_scope
쿼리문(ActiveRecord::Relation으로 반환되어야함)
end
[모든 스코프 삭제하기]
- unscoped.all
- 가장 기초 쿼리로 돌아옴, 적용된 스코프 해제, { } (블록)을 사용할 수 있음, 적용된 모든 쿼리메서드 삭제
- 사용하기
Book.unscoped {
#설정사항 넣기
}
[스코프 참고자료]
- 공식 API 문서 : http://guides.rorlab.org/active_record_querying.html
'기타 > 멋쟁이사자처럼' 카테고리의 다른 글
[git] 버젼관리 #1 (0) | 2017.03.20 |
---|---|
[rails] 레일즈 모델 - 트랜잭션 (0) | 2017.03.04 |
[ruby] 루비 기초편 - Array (0) | 2017.03.02 |
[rails] 레일즈 모델 - 쿼리메서드 (0) | 2017.02.21 |
[github] github 협업 flow (0) | 2017.02.17 |
댓글