모듈: Mongoid::Association::EagerLoadable

포함 항목:
Contextual::Memory, Contextual::Mongo, Contextual::Mongo::DocumentsLoader
다음에 정의됨:
lib/mongoid/association/eager_loadable.rb

개요

이 모듈은 기준에 대한 선행 로딩 동작을 정의합니다.

인스턴스 메서드 요약 접기

인스턴스 메서드 세부 정보

#Huge_load(Docs) ⇒ Array<Mongoid::Document>

지정된 문서에 대한 연관 관계를 로드합니다.

매개변수:

반환합니다:



25
26
27
28
29
30
31
# 파일 'lib/mongoid/association/eager_loadable.rb', 줄 25

def Eager_load(참고자료)
  참고자료. do |d|
    만약 Eager_loadable?
      사전 로드(기준.포함, d)
    end
  end
end

#Huge_loadable?true | false

기준에 즉시 로드해야 하는 연관 포함이 있는지 여부를 나타냅니다.

반환합니다:

  • (true | false)

    선행 로드 여부입니다.



16
17
18
# 파일 'lib/mongoid/association/eager_loadable.rb', 줄 16

def Eager_loadable?
  !기준.포함.비어 있나요?
end

#사전 로드(associations, Docs) ⇒ 객체

지정된 문서에 대한 연관 관계를 로드합니다. 이 작업은 재귀적으로 수행되어 지정된 문서의 관련 문서와의 연관 관계를 로드합니다.

매개변수:



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 파일 'lib/mongoid/association/eager_loadable.rb', 줄 40

def 사전 로드(연관 관계, 참고자료)
  assoc_map = 연관 관계.group_by(&:inverse_class_name)
  docs_map = {}
  대기열 = [ class.to_s ]

  동안 class = 대기열.shift
    만약 방식 = assoc_map.삭제(class)
      방식. do |assoc|
        대기열 << assoc.class_name

        # 이 클래스가 포함 트리에 중첩된 경우 문서만 로드합니다.
        # 위의 연관 관계에 대해. 상위 연관 관계가 없는 경우,
        # 이 메서드에 전달된 문서의 문서를 포함합니다.
        ds = 참고자료
        만약 assoc.parent_inclusions.분량 > 0
          ds = assoc.parent_inclusions.map{ |p| docs_map[p].to_a }.flatten
        end

        res = assoc.관계.Eager_loader([assoc], ds).실행

        docs_map[assoc.이름] ||= [].to_set
        docs_map[assoc.이름].merge(res)
      end
    end
  end
end