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

상속:
객체
  • 객체
모두 표시
다음을 포함합니다.
바인딩 가능
다음에 정의됨:
lib/mongoid/association/referenced/has_and_belongs_to_many/Binding.rb

개요

모든 has_and_belongs_to_many 연관 관계에 대한 바인딩 클래스입니다.

인스턴스 속성 요약

Bindable에 포함된 속성

#_association, #_base, #_target

인스턴스 메서드 요약 접기

Bindable에 포함된 메서드

#Binding, #initialize

인스턴스 메서드 세부 정보

#bind_one(doc) ⇒ 객체

단일 문서 를 역방향 연관 관계로 바인딩합니다. 특히 프록시에 추가할 때 사용됩니다.

예시:

하나의 문서 를 바인딩합니다.

person.preferences.bind_one(preference)

매개변수:

  • doc (문서)

    바인딩할 단일 문서 입니다.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/Binding.rb', 줄 20

def bind_one(doc)
  바인딩 do
    inverse_keys = try_method(doc, _association.inverse_foreign_key) 하지 않는 한 doc.동결?
    만약 inverse_keys
      record_id = inverse_record_id(doc)
      하지 않는 한 inverse_keys.포함?(record_id)
        try_method(doc, _association.inverse_foreign_key_setter, inverse_keys.push(record_id))
      end
      doc.reset_relation_criteria(_association.inverse)
    end
    _base._synced[_association.foreign_key] = true
    doc._synced[_association.inverse_foreign_key] = true
  end
end

#verify_inverse_association(doc) ⇒ Mongoid::Association::Relatable

문서 에서 역 연관 관계를 찾습니다.

매개변수:

반환합니다:



77
78
79
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/Binding.rb', 줄 77

def describe_inverse_association(doc)
  doc.관계[_base.클래스.이름.복조화.밑줄.pluralize]
end

#inverse_record_id(doc) ⇒ BSON::ObjectId

inverse_keys가 참조하는 역 ID 찾기

매개변수:

반환합니다:

  • (BSON::ObjectId)

    역 ID입니다.



58
59
60
61
62
63
64
65
66
67
68
69
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/Binding.rb', 줄 58

def inverse_record_id(doc)
  만약 pk = _association.옵션[:inverse_primary_key]
    _base.send(pk)
  other
    inverse_association = describe_inverse_association(doc)
    만약 inverse_association
      _base.__send__(inverse_association.Primary_key)
    other
      _base._id
    end
  end
end

#unbind_one(doc) ⇒ Object

단일 문서의 바인딩을 해제합니다.

예시:

문서 바인딩을 해제합니다.

person.preferences.unbind_one(document)


39
40
41
42
43
44
45
46
47
48
49
50
# 파일 'lib/mongoid/association/referenced/has_and_belongs_to_many/Binding.rb', 줄 39

def unbind_one(doc)
  바인딩 do
    _base.send(_association.foreign_key).delete_one(record_id(doc))
    inverse_keys = try_method(doc, _association.inverse_foreign_key) 하지 않는 한 doc.동결?
    만약 inverse_keys
      inverse_keys.delete_one(inverse_record_id(doc))
      doc.reset_relation_criteria(_association.inverse)
    end
    _base._synced[_association.foreign_key] = true
    doc._synced[_association.inverse_foreign_key] = true
  end
end