모듈: Mongoid::Traversable

확장자:
ActiveSupport::Concern
포함 항목:
컴포저블
다음에 정의됨:
lib/mongoid/traversable.rb

개요

문서 그래프 탐색과 관련된 동작을 제공하기 위해 Mongoid::Document에 Mixin 모듈이 포함되어 있습니다.

네임스페이스 아래에 정의됨

모듈: ClassMethods, 판별 자 할당 , 판별자 검색

클래스 메서드 요약 접기

인스턴스 메서드 요약 접기

클래스 메서드 세부 정보

.__redefine(소유자, 이름, 값) ⇒ 객체

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

[소스 보기]

17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 파일 'lib/mongoid/traversable.rb', 줄 17

def __redefine(소유자, 이름, value)
  만약 소유자.singleton_class?
    소유자.redefine_method(이름) { value }
    소유자.send(:public, 이름)
  end
  소유자.redefine_singleton_method(이름) { value }
  소유자.singleton_class.send(:public, 이름)
  소유자.redefine_singleton_method("#{name}=") do |new_value|
    만약 소유자.같음?(self)
      value = new_value
    other
      ::몽고이드::순회 가능.재정의(self, 이름, new_value)
    end
  end
  소유자.singleton_class.send(:public, "#{name}=")
end

인스턴스 메서드 세부 정보

#_children(reset: false) ⇒ Array<Document>

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

모든 하위 Documents 을(를) 이 Document로 가져옵니다.

반환합니다:

  • (Array<Document>)

    계층 구조의 모든 하위 문서입니다.

[소스 보기]

239
240
241
242
243
244
245
246
247
248
249
250
# 파일 'lib/mongoid/traversable.rb', 줄 239

def _children(재설정: 거짓)
  # `_parent` 메서드에 대해서는 위의 설명을 참조하여 변수가
  # 여기에는 두 개의 밑줄이 있어야 합니다.
  #
  # Rubocop:disable Naming/MemoizedInstanceVariableName
  만약 재설정
    @__children = nil
  other
    @__children ||= collection_children
  end
  # Rubocop: 활성화 Naming/MemoizedInstanceVariableName
end

#_descendants(reset: false) ⇒ Array<Document>

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

Document 의 모든 하위 항목 Documents 를 재귀적으로 가져옵니다. 이는 전체 트리의 변경 사항을 확인해야 하는 루트 문서 에서 지속성 업데이트 작업을 호출할 때 사용됩니다. 내장된 문서의 지속성은 최적화된 호출이므로 항상 선호됩니다... 이 작업은 계층이 큰 도메인에서는 비용이 많이 들 수 있습니다.

반환합니다:

  • (Array<Document>)

    계층 구조의 모든 하위 문서입니다.

[소스 보기]

262
263
264
265
266
267
268
269
270
271
272
273
# 파일 'lib/mongoid/traversable.rb', 줄 262

def _descendants(재설정: 거짓)
  # `_parent` 메서드에 대해서는 위의 설명을 참조하여 변수가
  # 여기에는 두 개의 밑줄이 있어야 합니다.
  #
  # Rubocop:disable Naming/MemoizedInstanceVariableName
  만약 재설정
    @__descendants = nil
  other
    @__descendants ||= collection_descendants
  end
  # Rubocop: 활성화 Naming/MemoizedInstanceVariableName
end

#_parentMongoid::Document | nil

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

이 문서 의 상위 문서 를 조회합니다.

반환합니다:

[소스 보기]

109
110
111
# 파일 'lib/mongoid/traversable.rb', 줄 109

def _parent
  @__parent || nil
end

#_parent=(문서) ⇒ 객체

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

이 문서 의 상위 문서 를 설정합니다.

매개변수:

  • 문서 (Mongoid::Document | nil)

    상위 문서 로 설정하다 문서 입니다.

[소스 보기]

121
122
123
# 파일 'lib/mongoid/traversable.rb', 줄 121

def _parent=(문서)
  @__parent = 문서
end

#_reset_memoized_descendants!nil

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

객체 에서 메모된 하위 항목을 재설정합니다. 내장된 배열 의 크기가 변경될 때 내부적으로 호출됩니다.

반환합니다:

  • (nil)

    nil.

[소스 보기]

389
390
391
392
393
# 파일 'lib/mongoid/traversable.rb', 줄 389

def _reset_memoized_descendants!
  _parent&._reset_memoized_descendants!
  _children 재설정: true
  _descendants 재설정: true
end

#_rootDocument

객체 그래프 에서 루트 문서 를 반환합니다. 현재 문서 가 그래프 의 루트 객체 인 경우 자체를 반환합니다.

예시:

계층 구조에서 루트 문서 를 가져옵니다.

document._root

반환합니다:

  • (문서)

    계층 구조의 루트 문서 입니다.

[소스 보기]

402
403
404
405
406
# 파일 'lib/mongoid/traversable.rb', 줄 402

def _root
  객체 = self
  객체 = 객체._parent 동안 객체._parent
  객체
end

#_root?true | false

이 문서가 계층 구조의 루트 문서입니까?

예시:

문서 가 루트입니까?

document._root?

반환합니다:

  • (true | false)

    문서 가 루트인 경우.

[소스 보기]

414
415
416
# 파일 'lib/mongoid/traversable.rb', 줄 414

def _root?
  _parent ? 거짓 : true
end

#collection_children배열<문서>

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

이 문서의 모든 하위 항목을 수집합니다.

반환합니다:

[소스 보기]

280
281
282
283
284
285
286
287
288
289
# 파일 'lib/mongoid/traversable.rb', 줄 280

def collection_children
  []. do |어린이|
    embedded_relations.각각의 쌍 do |이름, _association|
      without_autobuild do
        자식 = send(이름)
        어린이.concat(배열.(자식)) 만약 자식
      end
    end
  end
end

#collection_descendantsArray<문서>

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

이 문서 의 모든 하위 항목을 수집합니다.

반환합니다:

[소스 보기]

296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
# 파일 'lib/mongoid/traversable.rb', 줄 296

def collection_descendants
  어린이 = []
  to_expand = _children
  확장 = {}

  까지 to_expand.비어 있나요?
    확장 = to_expand
    to_expand = []
    확장. do |자식|
      다음 만약 확장[자식]

      # _id 가 nil이면 확장으로 표시하지 마세요.
      # _ids, nil ID를 가진 여러 내장된 문서가 비교됩니다.
      일부 문서는 확장되지 않습니다.
      확장[자식] = true 만약 자식._id
      어린이 << 자식
      to_expand += 자식._children
    end
  end

  어린이
end

#flag_descendants_persisted배열<문서>

모든 하위 항목을 지속형으로 표시합니다.

반환합니다:

  • (Array<Document>)

    플래그가 지정된 하위 항목.

[소스 보기]

322
323
324
325
326
# 파일 'lib/mongoid/traversable.rb', 줄 322

def flag_descendants_persisted
  _descendants. do |자식|
    자식.new_record = 거짓
  end
end

#유전성?true | false

문서 가 다른 문서 의 하위 클래스인지 확인합니다.

예시:

문서 가 하위 클래스인지 확인

Square.new.hereditary?

반환합니다:

  • (true | false)

    유전적이면 참, 그렇지 않으면 거짓입니다.

[소스 보기]

334
335
336
# 파일 'lib/mongoid/traversable.rb', 줄 334

def 유전?
  self.클래스.유전?
end

#parentize(문서) ⇒ Document

하위/부모 연관 관계를 설정합니다. 이는 새로 생성된 객체에 사용되어 그래프 에 제대로 추가될 수 있습니다.

예시:

상위 문서 를 설정합니다.

document.parentize(parent)

매개변수:

  • 문서 (문서)

    상위 문서.

반환합니다:

[소스 보기]

347
348
349
# 파일 'lib/mongoid/traversable.rb', 줄 347

def 부모화(문서)
  self._parent = 문서
end

#remove_child(자식) ⇒ 객체

이 상위 문서에서 하위 문서 를 제거합니다. 임베드된 경우 nil로 설정하다 하고, 그렇지 않으면 임베드에서 many를 제거 합니다.

이는 RemoveEmbedded 지속성 명령에서 호출됩니다.

예시:

하위 항목을 제거합니다.

document.remove_child(child)

매개변수:

  • 자식 (문서)

    제거할 하위(포함된) 문서입니다.

[소스 보기]

360
361
362
363
364
365
366
367
368
369
# 파일 'lib/mongoid/traversable.rb', 줄 360

def remove_child(자식)
  이름 = 자식.association_name
  만약 자식.embedded_one?
    속성.삭제(자식._association.store_as)
    remove_ivar(이름)
  other
    관계 = send(이름)
    관계._remove(자식)
  end
end

#reset_persisted_descendants배열<문서>

하위 항목이 지속된 후에는 이를 호출하여 모든 변경 사항을 이동하고 한 번의 호출로 지속되는 것으로 플래그를 지정할 수 있습니다.

반환합니다:

[소스 보기]

375
376
377
378
379
380
381
# 파일 'lib/mongoid/traversable.rb', 줄 375

def reset_persisted_descendants
  _descendants. do |자식|
    자식.move_changes
    자식.new_record = 거짓
  end
  _reset_memoized_descendants!
end