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

상속:
Many
  • 객체
모두 표시
확장자:
전달 가능, ClassMethods
다음을 포함합니다.
배치 가능
다음에 정의됨:
lib/mongoid/association/embedded/embeds_many/proxy.rb

개요

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

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

모듈: 클래스 메서드

인스턴스 메서드 요약 접기

ClassMethods에 포함된 메서드

explain_loader, embedded?, foreign_key_suffix

Batchable에 포함된 메서드

#batch_clear, #batch_insert, #batch_remove, #batch_replace

Positional에 포함된 메서드

#positionally

Many에서 상속된 메서드

#공백?, #cache_version, #create, #create!, #find_or_create_by, #find_or_create_by!, #find_or_initialize_by, #nil?, #respond_to?, #scoped, #serializable_hash

생성자 세부 정보

#initialize(base, target,association) ⇒ Many

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

예시:

새 연결을 만듭니다.

Many.new(person, addresses, association)

매개변수:



70
71
72
73
74
75
76
77
78
79
80
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 70

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을 일관되게 사용하고 있는지 확인하세요. Rubocop:Stylish/MissingRespondToMissing 비활성화

매개변수:

  • 이름 (기호 | string)

    메서드의 이름입니다.

  • *args (객체...)

    메서드 인수입니다.

  • &block

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

반환합니다:

  • (Criteria | Object)

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



525
526
527
528
529
530
531
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 525

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 (문서...)

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



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

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

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

  self
end

#_remove(document) ⇒ 객체

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

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

매개변수:

  • 문서 (문서)

    삭제할 문서입니다.



239
240
241
242
243
244
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 239

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

#as_documentArray<Hash>

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

예시:

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

person.addresses.as_document

반환합니다:

  • (Array<Hash>)

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



113
114
115
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 113

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

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

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

예시:

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

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

매개변수:

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

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

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

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

반환합니다:

  • (문서)

    새 문서입니다.



141
142
143
144
145
146
147
148
149
150
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 141

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)

    빈 연관 관계.



168
169
170
171
172
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 168

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

#concat(Docs) ⇒ Array<Document>

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

예시:

다른 문서와 연결합니다.

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

매개변수:

  • 참고자료 (Array<Document>)

    추가할 Docs 입니다.

반환합니다:



126
127
128
129
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 126

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? 메서드.



196
197
198
199
200
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 196

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

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

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

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

예시:

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

person.addresses.delete(address)

매개변수:

  • 문서 (문서)

    삭제할 문서입니다.

반환합니다:

  • (Document | nil)

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



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

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" })

매개변수:

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

    삭제 문서의 조건입니다.

반환합니다:

  • (정수)

    삭제된 문서 수입니다.



257
258
259
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 257

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

#delete_ifEmbedsMany::Proxy | 열거자

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

예시:

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

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

반환합니다:

  • (EmbedsMany::Proxy | Enumerator)

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



270
271
272
273
274
275
276
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 270

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" })

매개변수:

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

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

반환합니다:

  • (정수)

    폐기된 문서 수입니다.



289
290
291
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 289

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입니다.



309
310
311
312
313
314
315
316
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 309

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

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

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

예시:

단일 문서를 팝업합니다.

relation.pop

여러 문서를 팝업합니다.

relation.pop(3)

매개변수:

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

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

반환합니다:

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

    팝업된 문서입니다.



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

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)

    이동된 문서입니다.



359
360
361
362
363
364
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 359

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

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

#대체(Docs) ⇒ 다수

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

예시:

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

person.addresses.substitute([ address ])

매개변수:

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

    대체 Docs.

반환합니다:

  • (많음)

    프록시 연결.



375
376
377
378
379
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 375

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

#unscoped기준

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

예시:

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

person.addresses.unscoped

반환합니다:

  • (기준)

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



388
389
390
391
392
393
# 파일 'lib/mongoid/association/embedded/embeds_many/proxy.rb', 줄 388

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