모듈: Mongoid::Scopable::ClassMethods

다음에 정의됨:
lib/mongoid/scopable.rb

인스턴스 메서드 요약 접기

인스턴스 메서드 세부 정보

#default_scopable?true | false

클래스에 기본값 범위를 적용할 수 있나요?

예시:

기본값 범위를 적용할 수 있나요?

Band.default_scopable?

반환합니다:

  • (true | false)

    기본값 범위를 적용할 수 있는 경우.



95
96
97
# 파일 'lib/mongoid/scopable.rb', 95줄

def default_scopable?
  default_scoping? && !스레드.without_default_scope?(self)
end

#default_scope(value = nil) ⇒ Proc

모델에 기본값 범위를 추가합니다. 이 범위는 #unscoped를 지정하지 않는 한 모든 기준에 적용됩니다.

예시:

기준을 사용하여 기본 범위를 정의합니다.

class Band
  include Mongoid::Document
  field :active, type: Boolean
  default_scope where(active: true)
end

proc을 사용하여 기본 범위를 정의합니다.

class Band
  include Mongoid::Document
  field :active, type: Boolean
  default_scope ->{ where(active: true) }
end

매개변수:

  • value (Proc | Criteria) (기본값: nil)

    기본값 범위입니다.

반환합니다:

  • (Proc)

    기본값 범위입니다.

다음을 발생시킵니다.



83
84
85
86
87
# 파일 'lib/mongoid/scopable.rb', 83줄

def default_scope(value = nil)
  value = Proc.신규 { yield } 만약 block_given?
  check_scope_validity(value)
  self.default_scoping = process_default_scope(value)
end

#queryableCriteria

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

스코프 스택 의 마지막 또는 새 쿼리 가능 항목을 가져옵니다.

예시:

쿼리 가능 항목을 가져옵니다.

Model.queryable

반환합니다:



107
108
109
110
111
# 파일 'lib/mongoid/scopable.rb', 107줄

def 쿼리 가능
  crit = 스레드.current_scope(self) || 기준.신규(self)
  crit.임베디드 = true 만약 (crit.class.임베디드? && !crit.class.주기적?)
  crit
end

#범위(이름, 값, 차단(&B)) ⇒ 객체

클래스 수준에서 액세스하거나 제공된 이름으로 기준에 연결할 수 있는 범위를 만듭니다.

예시:

명명된 범위를 만듭니다.


class Person
  include Mongoid::Document
  field :active, type: Boolean
  field :count, type: Integer

  scope :active, -> { where(active: true) }
  scope :at_least, ->(count){ where(:count.gt => count) }
end

매개변수:

  • 이름 (기호)

    범위의 이름입니다.

  • value (Proc)

    범위의 조건입니다.

다음을 발생시킵니다.



132
133
134
135
136
137
138
139
140
141
# 파일 'lib/mongoid/scopable.rb', 132줄

def 범위(이름, value, &차단)
  정규화 = 이름.to_sym
  check_scope_validity(value)
  check_scope_name(정규화)
  _declared_scopes[정규화] = {
    범위: value,
    확장자: 모듈.신규(&차단)
  }
  정의_범위_메서드(정규화)
end

#범위 지정(옵션 = nil) ⇒ 기준

참고:

이렇게 하면 기본값 범위가 강제로 적용됩니다.

일반 범위를 사용하여 문서의 기준을 가져옵니다.

예시:

기준을 가져옵니다.

Band.scoped(skip: 10)

매개변수:

  • 옵션 (해시) (기본값: nil)

    기준에 대한 쿼리 옵션입니다.

옵션 해시(options):

  • :skip (정수)

    건너뛸 문서 수(선택 사항)입니다.

  • :limit (정수)

    제한할 문서 수(선택 사항)입니다.

  • :sort (배열)

    선택적 정렬 옵션.

반환합니다:

  • (기준)

    범위가 지정된 기준입니다.



158
159
160
# 파일 'lib/mongoid/scopable.rb', 158줄

def 범위 지정(옵션 = nil)
  쿼리 가능.범위 지정(옵션)
end

#범위해시

상위 클래스에 정의된 범위를 포함하여 이 클래스에 정의된 모든 범위의 해시를 반환합니다.

예시:

클래스에 대해 정의된 범위 가져오기

class Band
  include Mongoid::Document
  field :active, type: Boolean

  scope :active, -> { where(active: true) }
end
Band.scopes

반환합니다:

  • (해시)

    이 클래스에 대해 정의된 범위



51
52
53
54
55
56
57
58
59
# 파일 'lib/mongoid/scopable.rb', 51줄

def scopes
  정의된_범위 = {}
  조상.reverse. do |class|
    만약 class.response_to?(:_declared_scopes)
      정의된_범위.병합!(class._declared_scopes)
    end
  end
  정의된_범위.동결
end

#unscoped기준 | 객체

참고:

이렇게 하면 기본값 범위와 '.with_scope'를 사용하여 적용된 모든 범위가 강제로 제거됩니다.

범위를 적용하지 않고 기준을 가져옵니다.

예시:

범위가 지정되지 않은 기준을 가져옵니다.

Band.unscoped

범위 지정 없이 Yield to 차단 .

Band.unscoped do
  Band.where(name: "Depeche Mode")
end

반환합니다:

  • (Criteria | Object)

    범위가 지정되지 않은 차단 기준 또는 결과입니다.



177
178
179
180
181
182
183
184
185
186
187
# 파일 'lib/mongoid/scopable.rb', 177줄

def 범위가 지정되지 않은
  만약 block_given?
    without_default_scope do
      with_scope(nil) do
        yield(self)
      end
    end
  other
    쿼리 가능.범위가 지정되지 않은
  end
end

#with_default_scopeCriteria (기준 )라고도 함: criteria

가능하면 기본값 범위가 적용된 기준을 가져옵니다.

예시:

기본값 범위로 기준을 가져옵니다.

Model.with_default_scope

반환합니다:



195
196
197
# 파일 'lib/mongoid/scopable.rb', 195줄

def with_default_scope
  쿼리 가능.with_default_scope
end

#with_scope(기준) ⇒ 기준

제공된 기준을 범위 스택 에 푸시하고 제공된 차단 이 양보된 후 제거합니다.

예시:

기준에 부합합니다.

Person.with_scope(criteria)

매개변수:

  • 기준 (기준)

    적용 기준입니다.

반환합니다:

  • (기준)

    산출 기준입니다.



209
210
211
212
213
214
215
216
217
# 파일 'lib/mongoid/scopable.rb', 209줄

def with_scope(기준)
  이전 = 스레드.current_scope(self)
  스레드.set_current_scope(기준, self)
  시작
    yield 기준
  보장
    스레드.set_current_scope(이전, self)
  end
end

#without_default_scope객체

기본 범위를 적용하지 않고 차단을 실행합니다.

예시:

기본값 범위 없이 실행합니다.

Band.without_default_scope do
  Band.where(name: "Depeche Mode")
end

반환합니다:

  • (객체)

    차단의 결과입니다.



227
228
229
230
231
232
# 파일 'lib/mongoid/scopable.rb', 227줄

def without_default_scope
  스레드.begin_without_default_scope(self)
  yield
보장
  스레드.exit_without_default_scope(self)
end