모듈: Mongoid::Copyable
개요
이 모듈에는 Mongoid의 문서 복제/복제 동작이 포함되어 있습니다.
클래스 메서드 요약 접기
-
.clone_with_hash(klass, attrs) ⇒ 문서
지정된 속성 해시를 사용하여 지정된 클래스의 문서 복제본을 만듭니다.
인스턴스 메서드 요약 접기
-
#clone ⇒ 문서 (동의어: #dup)
현재
Document을(를) 복제하거나 복제합니다.
클래스 메서드 세부 정보
.clone_with_hash(klass, 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 = 객체.[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 연관 관계가 설정하다 되지 않습니다.
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 |