클래스: Mongoid::Association::Referenced::HasMany::Enumerable

상속:
객체
  • 객체
모두 표시
확장자:
전달 가능
다음을 포함합니다.
Enumerable
다음에 정의됨:
lib/mongoid/association/referenced/has_many/enumerable.rb

개요

이 클래스는 _loaded 문서의 기준 또는 배열 이 될 수 있는 대상을 가진 모든 참조된 연관 관계의 래퍼입니다. 이는 두 경우 또는 두 경우의 조합을 처리합니다.

인스턴스 속성 요약 접기

인스턴스 메서드 요약 접기

생성자 세부 정보

#initialize(target, base = nil, association = nil) ⇒ Enumerable

기준 또는 배열을 사용하여 새 열거형을 초기화합니다.

예시:

기준을 사용하여 열거형을 초기화합니다.

Enumerable.new(Post.where(:person_id => id))

배열 을 사용하여 열거형을 초기화합니다.

Enumerable.new([ post ])

매개변수:

[소스 보기]

262
263
264
265
266
267
268
269
270
271
272
273
274
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 262

def 초기화(대상, base = nil, 연관 관계 = nil)
  @_base = base
  @_association = 연관 관계
  만약 대상.is_a?(기준)
    @_added, @executed, @_loaded, @_unloaded = {}, 거짓, {}, 대상
  other
    @_added, @executed = {}, true
    @_loaded = 대상.주입({}) do |_target, doc|
      _target[doc._id] = doc 만약 doc
      _target
    end
  end
end

인스턴스 속성 세부 정보

#_added객체

세 가지 주요 인스턴스 변수는 문서 컬렉션입니다.


21
22
23
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 21

def _added
  @_added
end

#_added 추가된 문서입니다.(추가된 문서) ⇒ 객체

세 가지 주요 인스턴스 변수는 문서 컬렉션입니다.


21
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 21

attr_accessor :_added, :_loaded, :_unloaded

#_loaded객체

세 가지 주요 인스턴스 변수는 문서 컬렉션입니다.


21
22
23
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 21

def _loaded
  @_loaded
end

#_loaded _loaded된 지속된 문서입니다.(로드된 문서의 영구 문서) ⇒ 객체

세 가지 주요 인스턴스 변수는 문서 컬렉션입니다.


21
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 21

attr_accessor :_added, :_loaded, :_unloaded

#_unloaded객체

세 가지 주요 인스턴스 변수는 문서 컬렉션입니다.


21
22
23
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 21

def _unloaded
  @_unloaded
end

#_unloaded 지속형 Docs 를 나타내는 기준입니다.(AcriteriareRepresentingpersisteddocs.) ⇒ 객체

세 가지 주요 인스턴스 변수는 문서 컬렉션입니다.


21
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 21

attr_accessor :_added, :_loaded, :_unloaded

인스턴스 메서드 세부 정보

#<<(문서) ⇒ Document 또한 다음과 같이 알려져 있습니다: push

열거형에 문서 를 추가합니다.

예시:

문서 를 추가합니다.

enumerable << document

매개변수:

  • 문서 (문서)

    추가할 문서 입니다.

반환합니다:

  • (문서)

    문서입니다.

[소스 보기]

60
61
62
63
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 60

def <<(문서)
  _added[문서._id] = 문서
  self
end

#==(기타) ⇒ true | false

열거형이 다른 객체와 같은지 확인합니다.

예시:

동등성을 확인합니다.

enumerable == []

매개변수:

  • 기타 (Enumerable)

    다른 하나는 열거형입니다.

반환합니다:

  • (true | false)

    객체가 동일한 경우.

[소스 보기]

33
34
35
36
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 33

def ==(기타)
  반환 거짓 하지 않는 한 기타.response_to?(:entries)
  항목 == 기타.항목
end

#===(기타) ⇒ true | false

case 문에 대해 제공된 객체 를 기준으로 열거형이 동일한지 확인합니다.

예시:

대소문자 동등성을 확인합니다.

enumerable === Array

매개변수:

  • 기타 (객체)

    확인할 객체 입니다.

반환합니다:

  • (true | false)

    케이스 내 객체가 동일한 경우.

[소스 보기]

47
48
49
50
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 47

def ===(기타)
  반환 거짓 하지 않는 한 기타.response_to?(:entries)
  항목 === 기타.항목
end

#_loaded?true | false

열거형이 _load되었나요? 기준이 실행되었거나 전체 항목을 수동으로 로드한 경우에도 마찬가지입니다.

예시:

열거형이 _loaded되어 있나요?

enumerable._loaded?

반환합니다:

  • (true | false)

    열거형이 _load된 경우.

[소스 보기]

353
354
355
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 353

def _loaded?
  !!@executed
end

#any?(*args) ⇒ true | false

연관 관계에 선택적으로 제공된 필터의 적용을 받는 문서가 있는지 여부를 반환합니다.

이 메서드는 연관 관계에 지속형 문서가 있고 아직 지속되지 않은 문서가 있는 경우 true를 반환합니다.

연결이 이미 로드된 경우 이 메서드는 로드된 문서를 검사하고 데이터베이스 를 쿼리 하지 않습니다. 연관 관계가 로드되지 않은 경우, 인수가 없는 및 차단이 없는 버전은 연관 관계를 로드하지 않습니다. Enumerable에 위임된 다른 버전은 연결이 완료될 때까지 반복되는지 여부에 따라 연결을 완전히 로드할 수도 있고 그렇지 않을 수도 있습니다.

이 메서드는 매개변수와 차단 을 사용할 수 있습니다. 매개 변수 또는 차단 이 있는 동작은 표준 라이브러리 열거형 모듈에 위임됩니다.

Enumerable의 any? 메서드가 블록과 패턴을 모두 사용하여 호출되는 경우에는 패턴만 사용합니다.

매개변수:

  • *args (객체...)

    문서가 충족해야 하는 조건입니다. 자세한 내용은 열거 가능한 문서를 참조하세요.

반환합니다:

  • (true | false)

    협회에 문서가 있는 경우.

[소스 보기]

225
226
227
228
229
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 225

def 어떤?(*args)
  반환 super 만약 args.어떤? || block_given?

  !비어 있나요?
end

#as_json(options = {}) ⇒ 해시

인코딩 없이 항목에 #as_json을 전송합니다.

예시:

열거형을 JSON 으로 가져옵니다.

enumerable.as_json

매개변수:

  • 옵션 (해시) (기본값: {})

    선택적 매개변수입니다.

반환합니다:

  • (해시)

    항목은 모두 해시로 _로드됩니다.

[소스 보기]

469
470
471
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 469

def as_json(옵션 = {})
  항목.as_json(옵션)
end

#clearArray<Document>

이 열거형의 모든 문서를 지웁니다. 차단 을 전달하면 메모리에 있는 각 문서 에 양보합니다.

예시:

열거형을 비웁니다.

enumerable.clear

차단 으로 열거형을 지우세요.

enumerable.clear do |doc|
  doc.unbind
end

반환합니다:

  • (Array<Document>)

    제거된 _added Docs.

[소스 보기]

79
80
81
82
83
84
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 79

def 지우기
  만약 block_given?
    in_memory { |doc| yield(doc) }
  end
  _loaded.지우기 개인정보 정책에 _added.지우기
end

#cloneArray<Document>

참고:

이렇게 하면 모든 문서가 메모리에 로드됩니다.

열거형의 각 문서 를 복제합니다.

예시:

열거형을 복제합니다.

enumerable.clone

반환합니다:

  • (Array<Document>)

    열거형의 배열 복제본입니다.

[소스 보기]

94
95
96
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 94

def 복제
  수집 { |doc| doc.복제 }
end

#delete(document) {|doc| ... } ⇒ Document

열거형에서 제공된 문서 를 삭제합니다.

예시:

문서를 삭제합니다.

enumerable.delete(document)

매개변수:

  • 문서 (문서)

    삭제할 문서입니다.

수율:

  • (문서)

반환합니다:

  • (문서)

    삭제된 문서.

[소스 보기]

106
107
108
109
110
111
112
113
114
115
116
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 106

def 삭제(문서)
  doc = (_loaded.삭제(문서._id) || _added.삭제(문서._id))
  하지 않는 한 doc
    만약 _unloaded && _unloaded.위치(_id: 문서._id).존재합니까?
      yield(문서) 만약 block_given?
      반환 문서
    end
  end
  yield(doc) 만약 block_given?
  doc
end

#delete_if(&block) ⇒ Array<Document>

참고:

이 작업은 데이터베이스 에서 모든 문서를 로드합니다.

차단 이 true를 반환하는 열거형의 모든 문서 를 삭제합니다.

예시:

일치하는 모든 문서를 삭제합니다.

enumerable.delete_if do |doc|
  dod._id == _id
end

반환합니다:

[소스 보기]

129
130
131
132
133
134
135
136
137
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 129

def delete_if(&차단)
  load_all!
  Deleted = in_memory.SELECT(&차단)
  Deleted. do |doc|
    _loaded.삭제(doc._id)
    _added.삭제(doc._id)
  end
  self
end

#각각true

이 열거형을 반복하려면 몇 가지 시나리오를 처리해야 합니다.

열거형에 메모리에 로드된 기준이 있는 경우 모든 _로드된 Docs 및 모든 _추가된 Docs 에 양보됩니다.

열거형이 기준을 로드하지 않은 경우 문서를 로드하는 동안 커서를 반복한 다음 _added Docs 를 반복합니다.

차단 이 전달되지 않으면 모든 Docs 를 포함하는 열거자를 반환합니다.

예시:

열거형을 반복합니다.

enumerable.each do |doc|
  puts doc
end

모든 Docs를 포함하는 열거자를 반환합니다.


a = enumerable.each

반환합니다:

  • (true)

    이제 열거형이 _loaded되었습니다.

[소스 보기]

162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 162

def 
  하지 않는 한 block_given?
    반환 to_enum
  end
  만약 _loaded?
    _loaded.각각의 쌍 do |id, doc|
      문서 = _added.삭제(doc._id) || doc
      set_base(문서)
      yield(문서)
    end
  other
    unloaded_documents. do |doc|
      문서 = _added.삭제(doc._id) || _loaded.삭제(doc._id) || doc
      _loaded[문서._id] = 문서
      set_base(문서)
      yield(문서)
    end
  end
  _added.각각의 쌍 do |id, doc|
    yield(doc)
  end
  @executed = true
end

#비어 있나요?true | false

열거형이 비어 있나요? 로드 여부에 따라 카운트가 0인지 결정합니다.

예시:

열거형이 비어 있나요?

enumerable.empty?

반환합니다:

  • (true | false)

    열거형이 비어 있는 경우입니다.

[소스 보기]

193
194
195
196
197
198
199
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 193

def 비어 있나요?
  만약 _loaded?
    in_memory.비어 있나요?
  other
    _added.비어 있나요? && !_unloaded.존재합니까?
  end
end

#first(limit = nil) ⇒ Document

참고:

기준에 다른 정렬이 정의되어 있지 않은 경우 _id 에 대한 정렬을 자동으로 추가하면 성능 저하 문제가 발생할 수 있습니다. #first 또는 #last를 사용할 때 예기치 않은 성능 저하가 발생하는 경우 대신 #take를 사용하세요. #take 는 순서를 보장하지 않는다는 점에 유의하세요.

열거형의 첫 번째 문서 를 가져옵니다. 먼저 저장된 문서를 확인합니다. 열거형 전체를 로드하지 않습니다.

예시:

첫 번째 문서 를 가져옵니다.

enumerable.first

매개변수:

  • limit (정수) (기본값: nil)

    반환할 문서 수입니다.

반환합니다:

  • (문서)

    첫 번째 문서 가 발견되었습니다.

[소스 보기]

246
247
248
249
250
251
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 246

def first(limit = nil)
  _loaded.try(:values).try(:first) ||
      _added[(ul = _unloaded.try(:first, limit)).try(:_id)] ||
      ul ||
      _added.values.try(:first)
end

#in_memoryArray<문서>

참고:

차단 을 전달하면 각 문서 에 양보됩니다.

열거형에서 _loaded 또는 _added된 모든 문서를 반환합니다.

예시:

인메모리 Docs 를 가져옵니다.

enumerable.in_memory

반환합니다:

  • (Array<Document>)

    인메모리 Docs.

[소스 보기]

309
310
311
312
313
314
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 309

def in_memory
  참고자료 = (_loaded.values + _added.values)
  참고자료. do |doc|
    yield(doc) 만약 block_given?
  end
end

#include?(doc) ⇒ true | false

대상에 제공된 문서 가 포함되어 있나요?

예시:

대상에 문서 가 포함되어 있나요?

enumerable.include?(document)

매개변수:

  • doc (문서)

    확인할 문서 입니다.

반환합니다:

  • (true | false)

    문서 가 대상에 있는 경우.

[소스 보기]

284
285
286
287
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 284

def 포함?(doc)
  반환 super 하지 않는 한 _unloaded
  _unloaded.위치(_id: doc._id).존재합니까? || _added.has_key?(doc._id)
end

#검사string

검사는 좋은 배열 스타일의 인쇄를 위해 항목을 검사합니다.

예시:

열거형을 검사합니다.

enumerable.inspect

반환합니다:

  • (string)

    검사된 열거형.

[소스 보기]

296
297
298
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 296

def 검사
  항목.검사
end

#last(limit = nil) ⇒ Document

참고:

기준에 다른 정렬이 정의되어 있지 않은 경우 _id 에 대한 정렬을 자동으로 추가하면 성능 저하 문제가 발생할 수 있습니다. #first 또는 #last를 사용할 때 예기치 않은 성능 저하가 발생하는 경우 대신 #take를 사용하세요. #take 는 순서를 보장하지 않는다는 점에 유의하세요.

열거형의 마지막 문서 를 가져옵니다. 먼저 새 문서를 확인합니다. 열거형 전체를 로드하지 않습니다.

예시:

마지막 문서를 가져옵니다.

enumerable.last

매개변수:

  • limit (정수) (기본값: nil)

    반환할 문서 수입니다.

반환합니다:

  • (문서)

    마지막으로 발견된 문서 입니다.

[소스 보기]

331
332
333
334
335
336
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 331

def last(limit = nil)
  _added.values.try(:last) ||
      _loaded.try(:values).try(:last) ||
      _added[(ul = _unloaded.try(:last, limit)).try(:_id)] ||
      ul
end

#marshal_dumpArray<Object>

열거 가능한 프록시를 Marshal.dump하는 데 필요한 데이터를 제공합니다.

예시:

프록시를 덤프합니다.

Marshal.dump(proxy)

반환합니다:

  • (Array<Object>)

    덤프된 데이터입니다.

[소스 보기]

363
364
365
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 363

def marshal_dump
  [_added, _loaded, _unloaded, @executed]
end

#marshal_load(data) ⇒ Array<Object>

열거 가능한 프록시를 Marshal.load하는 데 필요한 데이터를 로드합니다.

예시:

프록시를 로드합니다.

Marshal.load(proxy)

반환합니다:

  • (Array<Object>)

    덤프된 데이터입니다.

[소스 보기]

373
374
375
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 373

def marshal_load(데이터)
  @_added, @_loaded, @_unloaded, @executed = 데이터
end

#resetfalse

열거형을 지속형 상태 로 재설정합니다.

예시:

열거형을 재설정합니다.

enumerable.reset

반환합니다:

  • (false)

    항상 거짓입니다.

[소스 보기]

383
384
385
386
387
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 383

def 재설정
  _loaded.지우기
  _added.지우기
  @executed = 거짓
end

#reset_unloaded(기준) ⇒ 객체

언로드된 기본 기준 객체를 새 기준 객체로 재설정합니다. HABTM 연관 관계를 사용하여 기본 배열을 동기화 상태로 유지했습니다.

예시:

언로드된 문서를 재설정합니다.

enumerable.reset_unloaded(criteria)

매개변수:

  • 기준 (기준)

    대체할 기준입니다.

[소스 보기]

396
397
398
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 396

def reset_unloaded(기준)
  @_unloaded = 기준 만약 _unloaded.is_a?(기준)
end

#respond_to?(name, include_private = false) ⇒ true | false

이 열거형이 제공된 메서드에 응답하나요?

예시:

열거형이 메서드에 응답하나요?

enumerable.respond_to?(:sum)

매개변수:

  • 이름 (string | 기호)

    메서드의 이름입니다.

  • include_private (true | false) (기본값은 false)

    비공개 메서드를 포함할지 여부입니다.

반환합니다:

  • (true | false)

    열거형이 응답하는지 여부입니다.

[소스 보기]

410
411
412
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 410

def response_to?(이름, include_private = 거짓)
  [].response_to?(이름, include_private) || super
end

#크기정수 ~라고도 함: 길이

이 열거형의 총 크기를 가져옵니다. 이는 모든 영구 문서와 비영구 문서의 조합입니다.

예시:

크기를 가져옵니다.

enumerable.size

반환합니다:

  • (정수)

    열거형의 크기입니다.

[소스 보기]

421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 421

def size
  # _unloaded가 있으면 문서 설정하다 와 일치합니다.
  # 이미 지속된 이 연관 관계에 속해 있습니다.
  # 데이터베이스 에 . 이 문서 설정하다 다음과 같은 경우에 고려해야 합니다.
  # 다음 항목과 함께 연관 관계의 크기를 계산합니다.
  이후 #이 추가되었습니다.
  만약 _unloaded
    만약 _added.어떤?
      # _added에는 이미 _unloaded된 레코드가 포함될 수 있습니다.
      # 일치합니다. 연관 관계에 배열 할당된 경우가 이에 해당합니다.
      항목의 #개와 그 중 일부는 이미 연관 관계의 요소였습니다.
      #
      # 따라서 _unloaded.count가 모든 요소를 제외하는지 확인해야 합니다.
      # 이미 _added에 존재합니다.

      카운트 = _unloaded.not(:_id. => _added.values.map(&:id)).카운트
      카운트 + _added.values.카운트
    other
      _unloaded.카운트
    end

  other
    _loaded.카운트 + _added.카운트
  end
end

#to_json(options = {}) ⇒ string

항목에 #to_json을 전송합니다.

예시:

열거형을 JSON 으로 가져옵니다.

enumerable.to_json

매개변수:

  • 옵션 (해시) (기본값: {})

    선택적 매개변수입니다.

반환합니다:

  • (string)

    항목은 모두 string 로 로드됩니다.

[소스 보기]

457
458
459
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 457

def to_json(옵션 = {})
  항목.to_json(옵션)
end

#uniqArray<Document>

참고:

이 작업은 데이터베이스 에서 모든 문서를 로드합니다.

열거형의 모든 고유 문서를 반환합니다.

예시:

모든 고유 문서를 가져옵니다.

enumerable.uniq

반환합니다:

  • (Array<Document>)

    고유한 문서.

[소스 보기]

481
482
483
# 파일 'lib/mongoid/association/referenced/has_many/enumerable.rb', 줄 481

def uniq
  항목.uniq
end