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

상속:
Mongoid::Association::Referenced::HasMany::Proxy 모두 표시
확장자:
클래스 메서드
다음에 정의됨:
lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb

개요

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

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

모듈: 클래스 메서드

상수 요약

프록시에서 상속된 상수

Proxy::KEEPER_METHODS

인스턴스 속성 요약

프록시에서 상속된 속성

#_association, #_base, #_target

인스턴스 메서드 요약 접기

ClassMethods에 포함된 메서드

explain_loader, embedded?

Mongoid::Association::Referenced::HasMany::Proxy에서 상속된 메서드

#delete_all, #destroy_all, #each, #exists?, #find, #initialize

Mongoid::Association::Referenced::HasMany::Proxy::ClassMethods에포함된 메서드

#eager_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, #initialize, #klass, #reset_unloaded, #substutable

마셜러블에 포함된 메서드

#marshal_dump, #marshal_load

생성자 세부 정보

이 클래스는 Mongoid::Association::Referenced::HasMany::Proxy의 생성자를 상속합니다.

동적 메서드 처리

이 클래스는 Mongoid::Association::Referenced::HasMany::Proxy 클래스의 Method_missing 메서드를 통해 동적 메서드를 처리합니다.

인스턴스 메서드 세부 정보

#<<(*args) ⇒ Array<Document> 또한 다음과 같이 알려져 있습니다: push

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

Rubocop:Metrics/AbcSize 비활성화

예시:

문서를 추가합니다.

person.posts << post

문서를 푸시합니다.

person.posts.push(post)

다른 문서와 연결합니다.

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

매개변수:

  • *args (문서...)

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

반환합니다:



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', 줄 58

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

  만약 (doc = 참고자료.first)
    추가(doc) do
      # 외래 키 값의 변경 사항은 무시합니다.
      # 이 코드 차단 에 변경된_속성 해시를 포함하는 데에는 두 가지 이유가 있습니다.
      #
      # 1) add_to_set 메서드는 외부
      # change_attributes 해시에 키를 입력하지만 다음을 입력하면
      # 메서드에 외래 키 값을 포함하는
      # updated_attributes 해시를 입력한 다음 외부에 존재하도록 합니다.
      # 이 메서드도 마찬가지입니다. 나중에 Syncable에서 사용됩니다.
      # 모듈을 사용하여 역방향 외래 키를 설정합니다.
      # 2) reset_unloaded 메서드는 외부
      # _base의 키, 즉
      # change_attributes 해시. 이는 다음과 같은 이유로 인해 발생합니다.
      # "resizable" 속성을 지정하면 다음 항목에 자동으로 추가됩니다.
      # change_attributes 해시. 이는 외국의 경우에만 해당됩니다.
      # 다른 연관 관계인 HABTM 연관 관계의 키 값
      # 외래 키 값에 문자열을 사용합니다. 일관성
      # 다른 연관 관계에서는 이 추가 사항을 무시합니다.
      # change_attributes 해시.
      # 이에 대한 자세한 내용은 MONGOID-4843 을(를) 참조하세요.
      reset_foreign_key_changes do
        _base.add_to_set(foreign_key => doc.public_send(_association.Primary_key))
        doc.저장 만약 Child_persistable?(doc)
        reset_unloaded
      end
    end
  end
  동기화되지 않음(_base, foreign_key) 개인정보 정책에 self
end

#build(attributes = {}, type = nil) {|doc| ... } ⇒ 문서 ~라고도 함: new

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

예시:

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

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

매개변수:

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

    새 문서의 속성입니다.

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

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

수율:

  • (문서)

반환합니다:

  • (문서)

    새 문서입니다.



123
124
125
126
127
128
129
130
131
132
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', 줄 123

def 빌드(속성 = {}, 유형 = nil)
  doc = 공장.execution_build(유형 || class, 속성, execution_callbacks: 거짓)
  추가(doc)
  doc.apply_post_processed_defaults
  _base.public_send(foreign_key).push(doc.public_send(_association.Primary_key))
  동기화되지 않음(doc, inverse_foreign_key)
  yield(doc) 만약 block_given?
  doc.run_pending_callbacks
  doc
end

#concat(documents) ⇒ Array<Document>

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

예시:

다른 문서와 연결합니다.

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

매개변수:

  • 문서 (Array<Document>)

    추가할 Docs 입니다.

반환합니다:



105
106
107
108
109
110
111
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', 줄 105

def concat(문서)
  ID, 참고자료, 삽입 = {}, [], []
  문서. { |doc| append_document(doc, ID, 참고자료, 삽입) }
  _base.push(foreign_key => ID.) 만약 지속 가능? || _creating?
  지속_지연(참고자료, 삽입)
  self
end

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

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

예시:

문서를 삭제합니다.

person.posts.delete(post)

매개변수:

  • 문서 (문서)

    제거 문서 입니다.

반환합니다:

  • (문서)

    일치하는 문서입니다.



146
147
148
149
150
151
152
153
154
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', 줄 146

def 삭제(문서)
  doc = super
  만약 doc && 지속 가능?
    _base.pull(foreign_key => doc.public_send(_association.Primary_key))
    _target._unloaded = 기준
    동기화되지 않음(_base, foreign_key)
  end
  doc
end

#nullify(replacement = []) ⇒ 객체 nullify_all, clear, 퍼지 라고도 합니다.

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

예시:

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

person.preferences.nullify

매개변수:

  • 교체 (Array<Document>) (기본값: [])

    대체 문서.



168
169
170
171
172
173
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', 줄 168

def nullify(교체 = [])
  _target. { |doc| execution_callback :before_remove, doc }
  Cleanup_inverse_for(교체) 하지 않는 한 _association.forced_nil_inverse?
  _base.세트(foreign_key => _base.public_send(foreign_key).지우기) 만약 지속 가능?
  clear_target_for_nullify
end

#대체(교체) ⇒ 다수

연관 관계의 기존 문서를 제공된 대상 문서로 대체합니다. 새 대상이 nil인 경우 필요한 삭제를 수행합니다.

Person.preferences.substry([ new_post ])

예시:

연결을 교체합니다.

매개변수:

  • 교체 (Array<Document>)

    대체 대상입니다.

반환합니다:



189
190
191
192
193
194
195
196
197
198
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', 줄 189

def 대체(교체)
  퍼지(교체)
  만약 교체.비어 있나요?
    reset_unloaded
    clear_foreign_key_changes
  other
    push(교체.컴팩트.uniq)
  end
  self
end

#unscoped기준

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

예시:

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

person.preferences.unscoped

반환합니다:

  • (기준)

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



207
208
209
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', 줄 207

def 범위가 지정되지 않은
  class.범위가 지정되지 않은.any_in(_id: _base.public_send(foreign_key))
end