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

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

개요

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

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

모듈: 클래스 메서드

상수 요약

프록시에서 상속된 상수

Proxy::KEEPER_METHODS

인스턴스 속성 요약

프록시에서 상속된 속성

#_association, #_base, #_target

인스턴스 메서드 요약 접기

ClassMethods에 포함된 메서드

explain_loader, embedded?

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

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

예시:

새 연결을 만듭니다.

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

매개변수:



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 비활성화

매개변수:

  • 이름 (기호 | string)

    메서드의 이름입니다.

  • *args (객체...)

    메서드 인수

  • &block

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

반환합니다:

  • (Criteria | Object)

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



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

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

예시:

문서를 추가합니다.

person.posts << post

문서를 푸시합니다.

person.posts.push(post)

다른 문서와 연결합니다.

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

매개변수:

  • *args (문서...)

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

반환합니다:



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

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

예시:

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

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

매개변수:

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

    새 문서의 속성입니다.

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

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

반환합니다:

  • (문서)

    새 문서입니다.



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>

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

예시:

다른 문서와 연결합니다.

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

매개변수:

  • 문서 (Array<Document>)

    추가할 Docs 입니다.

반환합니다:



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인 경우 적절한 제거가 수행됩니다.

예시:

문서를 삭제합니다.

person.posts.delete(post)

매개변수:

  • 문서 (문서)

    제거 문서 입니다.

반환합니다:

  • (문서)

    일치하는 문서입니다.



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) ⇒ 정수

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

예시:

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

person.posts.delete_all

연관 관계의 모든 문서를 조건부로 삭제합니다.

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

매개변수:

  • 조건 (해시) (기본값: 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) ⇒ 정수

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

예시:

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

person.posts.destroy_all

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

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

매개변수:

  • 조건 (해시) (기본값: 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>

참고:

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

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

예시:

문서를 반복합니다.

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

반환합니다:



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를 반환합니다.

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

예시:

영구 문서가 있나요?

person.posts.exists?

매개변수:

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

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

반환합니다:

  • (true | false)

    true는 지속형 문서가 존재한다는 뜻이고, 그렇지 않으면 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 객체 로 찾은 문서 중 차단 이 진실 값을 반환하는 첫 번째 문서 를 반환합니다.

예시:

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)

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



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

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

예시:

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

person.posts.nullify


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

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

예시:

연결을 해제합니다.

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

예시:

연결을 교체합니다.

person.posts.substitute([ new_post ])

매개변수:

  • 교체 (Array<Document>)

    대체 대상입니다.

반환합니다:



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

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

예시:

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

person.posts.unscoped

반환합니다:

  • (기준)

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



349
350
351
# 파일 'lib/mongoid/association/referenced/has_many/proxy.rb', 줄 349

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