클래스: Mongoid::Association::Referenced::HasMany::Proxy
- 확장자:
- 전달 가능, ClassMethods
- 다음에 정의됨:
- lib/mongoid/association/referenced/has_many/proxy.rb
개요
has_many 연관 관계를 위한 투명한 프록시입니다. 이 클래스의 인스턴스 는 주제 문서 에서 연관 게터 메서드를 호출할 때 반환됩니다. 이 클래스는 Mongoid::Association::Proxy에서 상속되며 대부분의 메서드를 연관 관계의 대상, 즉 로드해야 하는 반대편 컬렉션 의 문서 배열 에 전달합니다.
네임스페이스 아래에 정의됨
모듈: 클래스 메서드
상수 요약
프록시에서 상속된 상수
인스턴스 속성 요약
프록시에서 상속된 속성
#_association, #_base, #_target
인스턴스 메서드 요약 접기
-
#<<(*args) ⇒ Array<Document> (동의어: #push)
문서 또는 문서 배열을 연관 관계에 추가합니다.
-
#빌드(속성 = {}, 유형 = nil) ⇒ 문서 (동의어: #new)
속성에서 새 문서를 작성하고 저장하지 않고 이 연결에 추가합니다.
-
#concat(documents) ⇒ Array<Document>
문서 배열 을 연관 관계에 추가합니다.
-
#삭제(문서) ⇒ 문서 (동의어: #delete_one)
연결에서 문서를 삭제합니다.
-
#delete_all(conditions = nil) ⇒ 정수
제공된 조건에 따라 데이터베이스에서 모든 관련 문서를 삭제합니다.
-
#Destory_all(conditions = nil) ⇒ 정수
제공된 조건에 따라 데이터베이스에서 모든 관련 문서를 삭제합니다.
-
#각각(&block) ⇒ Array<Document>
연관 관계의 각 문서를 반복하고 제공된 블록에 양보합니다.
-
#존재합니까?(id_or_conditions = :none) ⇒ true | false
이 연관 관계의 문서가 데이터베이스에 존재하는지 확인합니다.
-
#find(*args) {|Object| ... } ⇒ 문서 | Array<Document> | nil
ID 또는 조건을 기반으로 연관 관계에서 일치하는 문서를 찾습니다.
-
#initialize(base, target,association) ⇒ Proxy
생성자
새 reference_many 연관 관계를 인스턴스화합니다.
-
#nullify ⇒ 객체 (동의어: #nullify_all)
외래 키와 참조를 삭제하고 프로세스에서 대상 문서를 분리하여 기본 문서와 대상 문서 간의 모든 연관 관계를 제거합니다.
-
#퍼지 ⇒ 다수 (동의어: #clear)
연결을 해제합니다.
-
#대체(교체) ⇒ 다수
연관 관계의 기존 문서를 제공된 대상 문서로 대체합니다.
-
#unscoped ⇒ 기준
기본 범위를 적용하지 않고 문서에 대한 기준을 가져옵니다.
ClassMethods에 포함된 메서드
Many에서 상속된 메서드
#공백?, #create, #create!, #find_or_create_by, #find_or_create_by!, #find_or_initialize_by, #nil?, #respond_to?, #scoped, #serializable_hash
프록시에서 상속된 메서드
apply_ordering, #extend_proxys, #klass, #reset_unloaded, #substutable
마셜러블에 포함된 메서드
생성자 세부 정보
#initialize(base, target,association) ⇒ Proxy
새 reference_many 연관 관계를 인스턴스화합니다. 역방향 객체에 외래 키와 기준을 설정합니다.
51 52 53 54 55 56 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 51 def 초기화(base, 대상, 연관 관계) 열거형 = Has Many::Enumerable.신규(대상, base, 연관 관계) super(base, 열거형, 연관 관계) do raise_mixed 만약 class. && !class.주기적? end end |
동적 메서드 처리
이 클래스는 메서드 누락 메서드를 통해 동적 메서드를 처리합니다.
#메서드 누락 ⇒ 기준 | 객체 (비공개)
대상 배열이 제공된 메서드에 응답하지 않으면 클래스에서 명명된 범위 또는 기준을 찾아 해당 위치로 호출을 보냅니다.
메서드가 배열에 존재하는 경우 기본 프록시 동작을 사용합니다.
TODO: respond_to_missing을 구성하여 사용하고 있는지 확인합니다.
anywhere we define method_missing.
Rubocop:Stylish/MissingRespondToMissing 비활성화
468 469 470 471 472 473 474 475 476 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 468 ruby2_keywords def Method_missing(이름, *args, &차단) 만약 _target.response_to?(이름) _target.send(이름, *args, &차단) other class.send(:with_scope, 기준) do 기준.public_send(이름, *args, &차단) end end end |
인스턴스 메서드 세부 정보
#<<(*args) ⇒ Array<Document> 또한 다음과 같이 알려져 있습니다: push
문서 또는 문서 배열을 연관 관계에 추가합니다. 프로세스에서 상위 항목을 설정하고 인덱스를 업데이트합니다.
73 74 75 76 77 78 79 80 81 82 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 73 def <<(*args) 참고자료 = args.flatten 반환 concat(참고자료) 만약 참고자료.size > 1 만약 (doc = 참고자료.first) 추가(doc) doc.저장 만약 지속 가능? && !_assigning? && !doc.검증되었나요? end self end |
#빌드(attributes = {}, type = nil) ⇒ 문서 라고도 함: new
속성에서 새 문서를 작성하고 저장하지 않고 이 연결에 추가합니다.
118 119 120 121 122 123 124 125 126 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 118 def 빌드(속성 = {}, 유형 = nil) 공장.execution_build(유형 || class, 속성, execution_callbacks: 거짓).탭 do |doc| 추가(doc) doc.apply_post_processed_defaults yield doc 만약 block_given? doc.run_pending_callbacks doc.run_callbacks(:build) { doc } end end |
#concat(documents) ⇒ Array<Document>
문서 배열을 연관 관계에 추가합니다. 문서를 한 번에 하나씩 유지하는 대신 배치 삽입을 수행합니다.
95 96 97 98 99 100 101 102 103 104 105 106 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 95 def concat(문서) 참고자료, 삽입 = [], [] 문서.각 do |doc| 다음 하지 않는 한 doc 추가(doc) save_or_delay(doc, 참고자료, 삽입) 만약 지속 가능? end 지속_지연(참고자료, 삽입) self end |
#delete(document) ⇒ Document 또한 다음과 같이 알려져 있습니다: delete_one
연결에서 문서를 삭제합니다. 이렇게 하면 문서의 외래 키가 nil로 설정됩니다. 연관 관계의 종속 옵션이 :delete_all 또는 :destory인 경우 적절한 제거가 수행됩니다.
140 141 142 143 144 145 146 147 148 149 150 151 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 140 def 삭제(문서) execution_callbacks_round(: 제거, 문서) do 결과 = _target.삭제(문서) do |doc| 만약 doc unbind_one(doc) 캐스케이드!(doc) 하지 않는 한 _assigning? end end 결과.탭 { reset_unloaded } end end |
#delete_all(conditions = nil) ⇒ 정수
제공된 조건에 따라 데이터베이스에서 모든 관련 문서를 삭제합니다.
169 170 171 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 169 def delete_all(조건 = nil) remove_all(조건, :delete_all) end |
#Destory_all(conditions = nil) ⇒ 정수
제공된 조건에 따라 데이터베이스에서 모든 관련 문서를 삭제합니다.
185 186 187 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 185 def Destory_all(조건 = nil) remove_all(조건, :destory_all) end |
#각각(&block) ⇒ Array<Document>
이렇게 하면 전체 연관 관계가 메모리에 로드됩니다.
연관 관계의 각 문서를 반복하고 제공된 블록에 양보합니다.
200 201 202 203 204 205 206 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 200 def 각(&차단) 만약 차단 _target.각(&차단) other to_enum end end |
#존재합니까?(id_or_conditions = :none) ⇒ true | false
이 연관 관계의 문서가 데이터베이스에 존재하는지 확인합니다.
연관 관계에 문서가 포함되어 있지만 모든 문서가 애플리케이션에만 존재하는 경우, 즉 데이터베이스에 유지되지 않은 경우, 이 메서드는 false를 반환합니다.
이 메서드는 연결이 이미 메모리에 로드된 경우에도 호출할 때마다 데이터베이스 를 쿼리합니다.
230 231 232 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 230 def 존재합니까?(id_or_conditions = : none) 기준.존재합니까?(id_or_conditions) end |
#find(*args) {|Object| ... } ⇒ Document | Array<Document> | nil
각 인수는 개별 ID, ID 배열 또는 중첩 배열일 수 있습니다. 각 배열이 평면화됩니다.
이렇게 하면 나중에 반복할 수 있도록 일치하는 문서를 메모리에 계속 보관합니다.
ID 또는 조건을 기반으로 연관 관계에서 일치하는 문서를 찾습니다.
이 메서드는 Mongoid::Criteria#find 에 위임합니다. 이 메서드에 차단이 지정되지 않으면 제공된 _id 값에 대해 하나 이상의 문서를 반환합니다.
이 메서드에 차단 이 지정되면 현재 Criteria 객체 로 찾은 문서 중 차단 이 진실 값을 반환하는 첫 번째 문서 를 반환합니다.
265 266 267 268 269 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 265 def 찾기(*args, &차단) 매칭 = 기준.찾기(*args, &차단) 배열(매칭).각 { |doc| _target.push(doc) } 매칭 end |
#nullify ⇒ 객체 또한 다음과 같이 알려져 있습니다: nullify_all
외래 키와 참조를 삭제하고 프로세스에서 대상 문서를 분리하여 기본 문서와 대상 문서 간의 모든 연관 관계를 제거합니다.
277 278 279 280 281 282 283 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 277 def nullify 기준.update_all(foreign_key => nil) _target.지우기 do |doc| unbind_one(doc) doc.Changed_attributes.삭제(foreign_key) end end |
#퍼지 ⇒ 다수 라고도 함: clear
연결을 해제합니다. 문서가 이미 보존된 경우 데이터베이스에서 문서를 삭제합니다.
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 294 def 퍼지 반환 nullify 하지 않는 한 _association.파괴적인? after_remove_error = nil 기준.delete_all many = _target.지우기 do |doc| execution_callback :before_remove, doc unbind_one(doc) doc.파괴됨 = true 시작 execution_callback :after_remove, doc 구출 StandardError => e after_remove_error = e end end 올리다 after_remove_error 만약 after_remove_error many end |
#대체(교체) ⇒ 다수
연관 관계의 기존 문서를 제공된 대상 문서로 대체합니다. 새 대상이 nil인 경우 필요한 삭제를 수행합니다.
327 328 329 330 331 332 333 334 335 336 337 338 339 340 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 327 def 대체(교체) 만약 교체 new_docs, 참고자료 = 교체.컴팩트, [] new_ids = new_docs.map(&:_id) remove_not_in(new_ids) new_docs.각 do |doc| 참고자료.push(doc) 만약 doc.send(foreign_key) != _base.send(_association.Primary_key) end concat(참고자료) other 퍼지 end self end |
#unscoped ⇒ 기준
기본 범위를 적용하지 않고 문서에 대한 기준을 가져옵니다.
349 350 351 |
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 349 def 범위가 지정되지 않은 class.범위가 지정되지 않은.위치(foreign_key => _base.send(_association.Primary_key)) end |