모듈: Mongoid::Copyable

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

개요

이 모듈에는 Mongoid의 문서 복제/복제 동작이 포함되어 있습니다.

클래스 메서드 요약 접기

인스턴스 메서드 요약 접기

클래스 메서드 세부 정보

.clone_with_hash(klass, attrs) ⇒ 문서

지정된 속성 해시를 사용하여 지정된 클래스의 문서 복제본을 만듭니다. 이는 포함된 연관 관계가 안전하게 복제될 수 있도록 재귀적으로 사용됩니다.

매개변수:

  • class (클래스)

    만들 문서 의 클래스입니다.

  • attrs (해시)

    속성의 해시입니다.

반환합니다:

  • (문서)

    새 문서입니다.



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

def self.clone_with_hash(class, attrs)
  dynamic_attrs = {}
  _attribute_names = class.attribute_names
  attrs.거부! do |attr_name, value|
    하지 않는 한 _attribute_names.포함?(attr_name)
      dynamic_attrs[attr_name] = value
      true
    end
  end

  공장.빌드(class, attrs). do |객체|
    dynamic_attrs. do |attr_name, value|
      assoc = 객체.embedded_relations[attr_name]
      만약 assoc&.하나? && value.is_a?(해시)
        객체.send("#{attr_name}=", clone_with_hash(assoc.class, value))
      elsif assoc&.많은? && value.is_a?(배열)
        참고자료 = value.map { |h| clone_with_hash(assoc.class, h) }
        객체.send("#{attr_name}=", 참고자료)
      elsif 객체.response_to?("#{attr_name}=")
        객체.send("#{attr_name}=", value)
      other
        객체.속성[attr_name] = value
      end
    end
  end
end

인스턴스 메서드 세부 정보

#clone문서 ~라고도 함: dup

현재 Document을(를) 복제하거나 복제합니다. 이렇게 하면 문서의 ID를 제외한 모든 속성이 반환되고 모든 인스턴스 변수가 재설정됩니다.

이 복제본에는 내장된 문서도 포함되어 있습니다. 내장된 문서 에 _id 필드 있는 경우 루트의 _id 와 달리 유지됩니다.

포함된 자식을 복제하는 경우 포함된 부모는 복제되지 않고 embedded_in 연관 관계가 설정하다 되지 않습니다.

예시:

문서를 복제합니다.

document.clone

반환합니다:

  • (문서)

    새 문서입니다.



22
23
24
25
26
27
28
29
# 파일 'lib/mongoid/copyable.rb', 22줄

def 복제
  # @note 이 다음 줄은 #2704 을(를) 주소 하기 위한 것입니다.
  # 문서 의 _id 및 ID 필드 로 인해 Mongoid에 문제가 발생합니다.
  # 다른 곳에서. 이 작업은 원하는 대로 루트 문서에서만 수행됩니다.
  # 내장된 문서에서 동일한 _id 를 유지합니다.
  attrs = clone_document.~을 제외하고(*self.클래스.id_fields)
  복사 가능.clone_with_hash(self.클래스, attrs)
end