클래스: Mongoid::Association::Referenced::HasMany::Proxy

상속:
Many
  • 객체
모두 표시
확장자:
전달 가능, ClassMethods
다음에 정의됨:
lib/mongoid/association/referenced/has_many/proxy.rb

개요

has_many 연관 관계를 위한 투명한 프록시입니다. 이 클래스의 인스턴스 는 주제 문서 에서 연관 게터 메서드를 호출할 때 반환됩니다. 이 클래스는 Mongoid::Association::Proxy에서 상속되며 대부분의 메서드를 연관 관계의 대상, 즉 로드해야 하는 반대편 컬렉션 의 문서 배열 에 전달합니다.

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

모듈: 클래스 메서드

인스턴스 메서드 요약 접기

ClassMethods에 포함된 메서드

explain_loader, embedded?

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) ⇒ Proxy

새 reference_many 연관 관계를 인스턴스화합니다. 역방향 객체에 외래 키와 기준을 설정합니다.

예시:

새 연결을 만듭니다.

Referenced::Many.new(base, target, association)

매개변수:



48
49
50
51
52
53
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 48

def 초기화(base, 대상, 연관 관계)
  열거형 = Has Many::Enumerable.신규(대상, base, 연관 관계)
  super(base, 열거형, 연관 관계) do
    raise_mixed 만약 class.임베디드? && !class.주기적?
  end
end

동적 메서드 처리

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

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

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

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

TODO: 메서드 누락을 정의하는 모든 곳에서 respond_to_missing을 일관되게 사용하고 있는지 확인하세요. Rubocop:Stylish/MissingRespondToMissing 비활성화

매개변수:

  • 이름 (기호 | string)

    메서드의 이름입니다.

  • *args (객체...)

    메서드 인수

  • &block

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

반환합니다:

  • (Criteria | Object)

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



485
486
487
488
489
490
491
492
493
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 485

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

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

예시:

문서를 추가합니다.

person.posts << post

문서를 푸시합니다.

person.posts.push(post)

다른 문서와 연결합니다.

person.posts.concat([ post_one, post_two ])

매개변수:

  • *args (문서...)

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

반환합니다:



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

def <<(*args)
  참고자료 = args.flatten
  반환 concat(참고자료) 만약 참고자료.size > 1

  만약 (doc = 참고자료.first)
    추가(doc)
    doc.저장 만약 지속 가능? && !_assigning? && !doc.검증되었나요?
  end
  self
end

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

속성에서 새 문서를 작성하고 저장하지 않고 이 연결에 추가합니다.

예시:

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

person.posts.build(:title => "A new post")

매개변수:

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

    새 문서의 속성입니다.

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

    빌드할 선택적 하위 클래스입니다.

반환합니다:

  • (문서)

    새 문서입니다.



115
116
117
118
119
120
121
122
123
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 115

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>

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

예시:

다른 문서와 연결합니다.

person.posts.concat([ post_one, post_two ])

매개변수:

  • 문서 (Array<Document>)

    추가할 Docs 입니다.

반환합니다:



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

def concat(문서)
  참고자료, 삽입 = [], []
  문서. do |doc|
    다음 하지 않는 한 doc

    추가(doc)
    save_or_delay(doc, 참고자료, 삽입) 만약 지속 가능?
  end

  지속_지연(참고자료, 삽입)
  self
end

#delete(document) ⇒ Document 또한 다음과 같이 알려져 있습니다: delete_one

연결에서 문서를 삭제합니다. 이렇게 하면 문서의 외래 키가 nil로 설정됩니다. 연관 관계의 종속 옵션이 :delete_all 또는 :destory인 경우 적절한 제거가 수행됩니다.

예시:

문서를 삭제합니다.

person.posts.delete(post)

매개변수:

  • 문서 (문서)

    제거 문서 입니다.

반환합니다:

  • (문서)

    일치하는 문서입니다.



137
138
139
140
141
142
143
144
145
146
147
148
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 137

def 삭제(문서)
  execution_callbacks_round(: 제거, 문서) do
    결과 = _target.삭제(문서) do |doc|
      만약 doc
        unbind_one(doc)
        캐스케이드!(doc) 하지 않는 한 _assigning?
      end
    end

    결과. { reset_unloaded }
  end
end

#delete_all(conditions = nil) ⇒ 정수

제공된 조건에 따라 데이터베이스에서 모든 관련 문서를 삭제합니다.

예시:

연관 관계의 모든 문서를 삭제합니다.

person.posts.delete_all

연결의 모든 문서를 조건부로 삭제 .

person.posts.delete_all({ :title => "Testing" })

매개변수:

  • 조건 (해시) (기본값: nil)

    삭제할 선택적 조건입니다.

반환합니다:

  • (정수)

    삭제된 문서 수입니다.



166
167
168
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 166

def delete_all(조건 = nil)
  remove_all(조건, :delete_all)
end

#Destory_all(conditions = nil) ⇒ 정수

제공된 조건에 따라 데이터베이스에서 모든 관련 문서를 삭제합니다.

예시:

연관 관계에 있는 모든 문서를 파기합니다.

person.posts.destroy_all

연결의 모든 문서를 조건부로 파기합니다.

person.posts.destroy_all({ :title => "Testing" })

매개변수:

  • 조건 (해시) (기본값: nil)

    파기할 선택적 조건입니다.

반환합니다:

  • (정수)

    폐기된 문서 수입니다.



182
183
184
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 182

def Destory_all(조건 = nil)
  remove_all(조건, :destory_all)
end

#각각(&block) ⇒ Array<Document>

참고:

이렇게 하면 전체 연관 관계가 메모리에 로드됩니다.

연관 관계의 각 문서를 반복하고 제공된 블록에 양보합니다.

예시:

문서를 반복합니다.

person.posts.each do |post|
  post.save
end

반환합니다:



197
198
199
200
201
202
203
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 197

def (&차단)
  만약 차단
    _target.(&차단)
  other
    to_enum
  end
end

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

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

연관 관계에 문서가 포함되어 있지만 모든 문서가 애플리케이션에만 존재하는 경우, 즉 데이터베이스에 유지되지 않은 경우, 이 메서드는 false를 반환합니다.

이 메서드는 연결이 이미 메모리에 로드된 경우에도 호출할 때마다 데이터베이스 를 쿼리합니다.

예시:

영구 문서가 있나요?

person.posts.exists?

매개변수:

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

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

반환합니다:

  • (true | false)

    true는 지속형 문서가 존재한다는 뜻이고, 그렇지 않으면 false입니다.



227
228
229
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 227

def 존재합니까?(id_or_conditions = : none)
  기준.존재합니까?(id_or_conditions)
end

#find(*args) {|Object| ... } ⇒ Document | Array<Document> | nil

참고:

각 인수는 개별 ID, ID 배열 또는 중첩 배열일 수 있습니다. 각 배열이 평면화됩니다.

참고:

이렇게 하면 나중에 반복할 수 있도록 일치하는 문서를 메모리에 계속 보관합니다.

ID 또는 조건을 기반으로 연관 관계에서 일치하는 문서를 찾습니다.

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

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

예시:

ID로 찾기.

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

여러 ID로 찾기.

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

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

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

매개변수:

  • *args ([ Object | Array<Object> ]...)

    ID.

  • &block

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

수율:

  • (객체)

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

반환합니다:

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

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



262
263
264
265
266
267
268
269
270
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 262

def 찾기(*args, &차단)
  만약 block_given? && args.비어 있나요?
    감지(&차단)
  other
    매칭 = 기준.찾기(*args, &차단)
    배열(매칭). { |doc| _target.push(doc) }
    매칭
  end
end

#nullify객체 또한 다음과 같이 알려져 있습니다: nullify_all

외래 키와 참조를 삭제하고 프로세스에서 대상 문서를 분리하여 기본 문서와 대상 문서 간의 모든 연관 관계를 제거합니다.

예시:

연관 관계를 무효화합니다.

person.posts.nullify


278
279
280
281
282
283
284
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 278

def nullify
  기준.update_all(foreign_key => nil)
  _target.지우기 do |doc|
    unbind_one(doc)
    doc.Changed_attributes.삭제(foreign_key)
  end
end

#puck(*fields) ⇒ 배열 | Array<Array>

연관 관계의 문서에서 지정된 필드 이름을 가져옵니다. 연관 관계가 로드되었는지 여부와 연관 관계에 저장되지 않은 문서가 있는지 여부에 관계없이 사용하는 것이 안전합니다.

예시:

모든 게시물의 제목을 추출합니다.

person.posts.pluck(:title)

매개변수:

  • *fields (기호...)

    추출할 필드 이름입니다.

반환합니다:

  • (Array | Array<Array>)

    필드 값의 배열 . 여러 필드가 제공되면 배열 이 반환됩니다.



300
301
302
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 300

def 뽑다(*필드)
  _target.뽑다(*필드)
end

#퍼지다수 라고도 함: clear

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

예시:

연결을 해제합니다.

person.posts.clear

반환합니다:

  • (많음)

    연결이 비었습니다.



311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 311

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인 경우 필요한 삭제를 수행합니다.

예시:

연결을 교체합니다.

person.posts.substitute([ new_post ])

매개변수:

  • 교체 (Array<Document>)

    대체 대상입니다.

반환합니다:



344
345
346
347
348
349
350
351
352
353
354
355
356
357
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 344

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기준

기본 범위를 적용하지 않고 문서에 대한 기준을 가져옵니다.

예시:

범위가 지정되지 않은 기준을 가져옵니다.

person.posts.unscoped

반환합니다:

  • (기준)

    범위가 지정되지 않은 기준입니다.



366
367
368
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 366

def 범위가 지정되지 않은
  class.범위가 지정되지 않은.위치(foreign_key => _base.send(_association.Primary_key))
end