클래스: Mongoid::Association::Embedded::EmbedsMany::Proxy

상속:
Many
  • 객체
모두 표시
확장자:
클래스 메서드
다음을 포함합니다.
배치 가능
다음에 정의됨:
lib/mongoid/association/embedded/embeds_many/proxy.rb

개요

embedded_many 연관 관계를 위한 투명한 프록시입니다. 이 클래스의 인스턴스 는 상위 문서 에서 연결 게터 메서드를 호출할 때 반환됩니다. 이 클래스는 Mongoid::Association::Proxy를 상속하고 해당 메서드의 대부분을 연관 관계의 대상, 즉 하위 문서의 배열 로 전달합니다.

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

모듈: 클래스 메서드

상수 요약

프록시에서 상속된 상수

Proxy::KEEPER_METHODS

인스턴스 속성 요약

프록시에서 상속된 속성

#_association, #_base, #_target

인스턴스 메서드 요약 접기

ClassMethods에 포함된 메서드

explain_loader, embedded?, foreign_key_suffix

Batchable에 포함된 메서드

#batch_clear, #batch_insert, #batch_remove, #batch_replace

Positional에 포함된 메서드

#positionally

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

마셜러블에 포함된 메서드

#marshal_dump, #marshal_load

생성자 세부 정보

#initialize(base, target,association) ⇒ Many

새 embeddeds_many 연관 관계를 인스턴스화합니다.

예시:

새 연결을 만듭니다.

Many.new(person, addresses, association)

매개변수:



67
68
69
70
71
72
73
74
75
76
77
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 67

def 초기화(base, 대상, 연관 관계)
  super do
    _target.each_with_index do |doc, index|
      통합(doc)
      doc._index = index
    end
    update_attributes_hash
    @_unscoped = _target.dup
    @_target = 범위(_target)
  end
end

동적 메서드 처리

이 클래스는 메서드 누락 메서드를 통해 동적 메서드를 처리합니다.

#메서드 누락기준 | 객체 (비공개)

대상 배열이 제공된 메서드에 응답하지 않으면 클래스에서 명명된 범위 또는 기준을 찾아 해당 위치로 호출을 보냅니다.

메서드가 배열에 존재하는 경우 기본 프록시 동작을 사용합니다.

TODO: respond_to_missing을 구성하여 사용하고 있는지 확인합니다.

anywhere we define method_missing.

Rubocop:Stylish/MissingRespondToMissing 비활성화

매개변수:

  • 이름 (기호 | string)

    메서드의 이름입니다.

  • *args (객체...)

    메서드 인수입니다.

  • &block

    선택적 차단을 전달합니다.

반환합니다:

  • (Criteria | Object)

    대상의 기준 또는 반환 값입니다.



490
491
492
493
494
495
496
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 490

ruby2_keywords def Method_missing(이름, *args, &차단)
  반환 super 만약 _target.response_to?(이름)

  class.send(:with_scope, 기준) do
    기준.public_send(이름, *args, &차단)
  end
end

인스턴스 메서드 세부 정보

#<<(*args) ⇒ 객체 push

문서 또는 문서 배열을 연관 관계에 추가합니다. 프로세스에서 상위 항목을 설정하고 인덱스를 업데이트합니다.

예시:

문서를 추가합니다.

person.addresses << address

문서를 푸시합니다.

person.addresses.push(address)

매개변수:

  • *args (문서...)

    문서 수에 제한이 없습니다.



89
90
91
92
93
94
95
96
97
98
99
100
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 89

def <<(*args)
  참고자료 = args.flatten
  반환 하지 않는 한 참고자료.어떤?
  반환 concat(참고자료) 만약 참고자료.size > 1

  참고자료.first. do |doc|
    추가(doc)
    doc.저장 만약 지속 가능? && !_assigning?
  end

  self
end

#_remove(document) ⇒ 객체

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

컬렉션 에서 단일 문서 를 제거합니다 *메모리에서만*. 변경 사항이 유지 되지 않습니다 .

매개변수:

  • 문서 (문서)

    삭제할 문서입니다.



236
237
238
239
240
241
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 236

def _remove(문서)
  _target.delete_one(문서)
  _unscoped.delete_one(문서)
  update_attributes_hash
  재색인
end

#as_documentArray<Hash>

이 연관 관계를 데이터베이스에서 그것의 표현으로 가져옵니다.

예시:

연관 관계를 속성 해시로 변환합니다.

person.addresses.as_document

반환합니다:

  • (Array<Hash>)

    db에 저장된 연관 관계입니다.



110
111
112
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 110

def as_document
  as_attributes.수집 { |attrs| BSON::문서.신규(attrs) }
end

#빌드(attributes = {}, type = nil) ⇒ 문서 라고도 함: new

연관 관계에서 새 문서 를 빌드하고 이를 대상에 추가합니다. 하위 클래스를 지정하려는 경우 선택적 유형을 사용합니다.

예시:

연관 관계에 새 문서를 작성합니다.

person.people.build(:name => "Bozo")

매개변수:

  • 속성 (해시) (기본값: {})

    문서 작성에 사용할 속성입니다.

  • 유형 (클래스) (기본값: nil)

    문서를 작성할 때 사용할 선택적 클래스입니다.

반환합니다:

  • (문서)

    새 문서입니다.



138
139
140
141
142
143
144
145
146
147
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 138

def 빌드(속성 = {}, 유형 = nil)
  공장.execution_build(유형 || _association.class, 속성, execution_callbacks: 거짓). do |doc|
    추가(doc)
    doc.apply_post_processed_defaults
    yield doc 만약 block_given?
    doc.run_pending_callbacks
    doc.run_callbacks(:build) { doc }
    _base._reset_memoized_descendants!
  end
end

#clearself

연결을 해제합니다. 문서가 이미 보존된 경우 데이터베이스에서 문서를 삭제합니다.

호스트 문서가 지속형이 아니지만 호스트 문서의 _id가 지속형 문서와 일치하는 경우, 연관 관계에서 #clear를 호출하면 애플리케이션의 문서 세트(호스트에 로드된 문서 세트)가 현재의 문서 세트와 다르더라도 데이터베이스에서 연관 관계의 문서가 제거됩니다. 는 데이터베이스에 있으며 호스트에는 연결에 영구 문서가 포함될 수 없습니다.

예시:

연결을 해제합니다.

person.addresses.clear

반환합니다:

  • (self)

    빈 연관 관계.



165
166
167
168
169
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 165

def 지우기
  batch_clear(_target.dup)
  update_attributes_hash
  self
end

#concat(Docs) ⇒ Array<Document>

문서 배열을 연관 관계에 추가합니다. 문서를 한 번에 하나씩 유지하는 대신 배치 삽입을 수행합니다.

예시:

다른 문서와 연결합니다.

person.addresses.concat([ address_one, address_two ])

매개변수:

  • 참고자료 (Array<Document>)

    추가할 Docs 입니다.

반환합니다:



123
124
125
126
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 123

def concat(참고자료)
  batch_insert(참고자료) 하지 않는 한 참고자료.비어 있나요?
  self
end

#count(*args, &block) ⇒ Integer

실제로 데이터베이스 에 유지된 연관 관계의 문서 수를 반환합니다.

총 문서 수를 확인하려면 #size를 사용하세요.

인수 또는 차단이 있는 경우 #count는 target 의 #count 메서드에 위임되며 영구 문서와 비영구 문서를 모두 포함합니다.

예시:

지속된 문서 수를 가져옵니다.

person.addresses.count

차단 과 일치하는 모든 문서의 수를 가져옵니다.

person.addresses.count { |a| a.country == "FR" }

#persisted를 사용하시겠습니까? 내부 블록을 사용하여 지속된 문서 수를 계산합니다.

person.addresses.count { |a| a.persisted? && a.country == "FR" }

매개변수:

  • *args (객체...)

    대상에 위임할 인수입니다.

반환합니다:

  • (정수)

    Docs? 메서드.



193
194
195
196
197
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 193

def 카운트(*args, &차단)
  반환 _target.카운트(*args, &차단) 만약 args.어떤? || 차단

  _target.카운트(&:persisted?)
end

#delete(document) ⇒ Document | nil 이라고도 함: delete_one

제공된 문서를 대상에서 삭제합니다. 이 메서드는 작업이 발생한 후 배열을 다시 인덱스하기 위해 프록시됩니다.

예시:

연결에서 문서를 삭제합니다.

person.addresses.delete(address)

매개변수:

  • 문서 (문서)

    삭제할 문서입니다.

반환합니다:

  • (Document | nil)

    삭제된 문서 또는 삭제된 문서가 없는 경우 nil입니다.



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 208

def 삭제(문서)
  execution_callbacks_round(: 제거, 문서) do
    _target.delete_one(문서). do |doc|
      만약 doc && !_바인딩?
        _unscoped.delete_one(doc)
        만약 _assigning?
          _base.add_atomic_pull(doc)
        other
          doc.삭제(억제: true)
          unbind_one(doc)
        end
        update_attributes_hash
      end
      재색인
    end
  end
end

#delete_all(conditions = {}) ⇒ Integer

콜백을 실행 하지 않고 연관 관계의 모든 문서를 삭제합니다.

예시:

연결에서 모든 문서를 삭제합니다.

person.addresses.delete_all

연결에서 문서를 조건부로 삭제합니다.

person.addresses.delete_all({ :street => "Bond" })

매개변수:

  • 조건 (해시) (기본값: {})

    삭제 문서의 조건입니다.

반환합니다:

  • (정수)

    삭제된 문서 수입니다.



254
255
256
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 254

def delete_all(조건 = {})
  remove_all(조건, : 삭제)
end

#delete_ifEmbedsMany::Proxy | 열거자

제공된 차단 이 true를 반환하는 모든 문서를 삭제합니다.

예시:

일치하는 문서를 삭제합니다.

person.addresses.delete_if do |doc|
  doc.state == "GA"
end

반환합니다:

  • (EmbedsMany::Proxy | Enumerator)

    차단 이 제공되지 않은 경우 프록시 또는 열거자입니다.



267
268
269
270
271
272
273
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 267

def delete_if
  반환 super 하지 않는 한 block_given?

  _target.dup. { |doc| 삭제(doc) 만약 yield doc }

  self
end

#Destory_all(conditions = {}) ⇒ Integer

콜백을 실행하는 동안 연결에 있는 모든 문서를 삭제합니다.

예시:

연결에서 모든 문서를 폐기합니다.

person.addresses.destroy_all

연결에서 문서를 조건부로 파기합니다.

person.addresses.destroy_all({ :street => "Bond" })

매개변수:

  • 조건 (해시) (기본값: {})

    파기할 문서의 조건입니다.

반환합니다:

  • (정수)

    폐기된 문서 수입니다.



286
287
288
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 286

def Destory_all(조건 = {})
  remove_all(조건, :destory)
end

#존재합니까?(id_or_conditions = :none) ⇒ true | false

이 연관 관계의 문서가 데이터베이스에 존재하는지 확인합니다.

예시:

영구 문서가 있나요?

person.posts.exists?

매개변수:

  • id_or_conditions (:none | nil | false | 해시 | 객체) (기본값: :none)

    :none( 기본값)인 경우, 연관 관계에 영구 문서가 존재하는 경우 true를 반환합니다. nil 또는 false이면 항상 false를 반환합니다. 해시가 제공되면 연관 관계의 문서를 쿼리하여 주어진 조건과 일치하는 문서를 찾고, 일치하는 항목이 지속되면 true를 반환합니다. 다른 모든 인수는 ID 로 해석되며, 일치하는 _id 를 가진 연결에 영구 문서가 있는지 쿼리합니다.

반환합니다:

  • (true | false)

    지속형 문서가 존재하면 true이고, 존재하지 않으면 false입니다.



306
307
308
309
310
311
312
313
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 306

def 존재합니까?(id_or_conditions = : none)
  case id_or_conditions
  when : none then _target.어떤?(&:persisted?)
  when nil, 거짓 then 거짓
  when 해시 then 위치(id_or_conditions).어떤?(&:persisted?)
  other 위치(_id: id_or_conditions).어떤?(&:persisted?)
  end
end

#find {|Object| ... } ⇒ Document | Array<Document> | nil

여러 가지 방법을 통해 이 연관 관계에서 문서를 찾습니다.

이 메서드는 Mongoid::Criteria#find 에 위임합니다. 이 메서드에 차단이 지정되지 않으면 제공된 _id 값에 대해 하나 이상의 문서를 반환합니다.

이 메서드에 차단 이 지정되면 현재 Criteria 객체 로 찾은 문서 중 차단 이 진실 값을 반환하는 첫 번째 문서 를 반환합니다.

예시:

ID로 문서를 찾습니다.

person.addresses.find(BSON::ObjectId.new)

여러 ID에 대한 문서를 찾습니다.

person.addresses.find([ BSON::ObjectId.new, BSON::ObjectId.new ])

블록을 사용하여 일치하는 첫 번째 문서를 찾습니다.

person.addresses.find { |addr| addr.state == 'CA' }

매개변수:

  • *args (객체...)

    다양한 인수.

  • &block

    선택적 차단을 전달합니다.

수율:

  • (객체)

    각 열거 가능한 요소를 차단 에 양보합니다.

반환합니다:

  • (문서 | 배열<문서> | nil)

    문서 또는 일치하는 문서입니다.



340
341
342
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 340

def 찾기(...)
  기준.찾기(...)
end

#pop(count = nil) ⇒ Document | Array<Document> | nil

연결에서 문서를 삭제합니다. 이는 단일 문서 또는 여러 문서일 수 있으며 변경 사항이 자동으로 유지됩니다.

예시:

단일 문서를 팝업합니다.

relation.pop

여러 문서를 팝업합니다.

relation.pop(3)

매개변수:

  • 카운트 (정수) (기본값: nil)

    팝할 문서 수이며, 제공되지 않은 경우 1 입니다.

반환합니다:

  • (문서 | 배열<문서> | nil)

    팝업된 문서입니다.



365
366
367
368
369
370
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 365

def (카운트 = nil)
  반환 [] 만약 카운트&.zero?

  참고자료 = _target.last(카운트 || 1). { |doc| 삭제(doc) }
  (카운트.nil? || 참고자료.비어 있나요?) ? 참고자료.first : 참고자료
end

#shift(count = nil) ⇒ Document | Array<Document> | nil

문서를 연관 관계 밖으로 이동시킵니다. 이는 단일 문서 또는 여러 문서일 수 있으며 변경 사항이 자동으로 유지됩니다.

예시:

단일 문서 를 이동합니다.

relation.shift

여러 문서를 이동합니다.

relation.shift(3)

매개변수:

  • 카운트 (정수) (기본값: nil)

    이동할 문서 수이거나 제공되지 않은 경우 1 입니다.

반환합니다:

  • (문서 | 배열<문서> | nil)

    이동된 문서입니다.



385
386
387
388
389
390
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 385

def shift(카운트 = nil)
  반환 [] 만약 카운트&.zero?

  참고자료 = _target.first(카운트 || 1). { |doc| 삭제(doc) }
  (카운트.nil? || 참고자료.비어 있나요?) ? 참고자료.first : 참고자료
end

#대체(Docs) ⇒ 다수

관계의 기존 문서를 제공된 대상 문서로 대체합니다.

예시:

연관 관계의 타깃을 대체합니다.

person.addresses.substitute([ address ])

매개변수:

  • 참고자료 (Array<Document> | Array<Hash>)

    대체 Docs.

반환합니다:

  • (많음)

    프록시 연결.



401
402
403
404
405
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 401

def 대체(참고자료)
  batch_replace(참고자료)
  update_attributes_hash
  self
end

#unscoped기준

이전의 모든 범위 지정이 제거된 연관 관계를 반환합니다. 이는 데이터베이스 에 있는 Docs 의 정확한 표현입니다.

예시:

범위가 지정되지 않은 문서를 가져옵니다.

person.addresses.unscoped

반환합니다:

  • (기준)

    범위가 지정되지 않은 연관 관계.



414
415
416
417
418
419
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 414

def 범위가 지정되지 않은
  criterion = class.범위가 지정되지 않은
  criterion.임베디드 = true
  criterion.문서 = _unscoped.delete_if(&:marked_for_destruction?)
  criterion
end