Class: Mongoid::Relations::Bindings::Referenced::ManyToMany
- Inherits:
-
Mongoid::Relations::Binding
- Object
- Mongoid::Relations::Binding
- Mongoid::Relations::Bindings::Referenced::ManyToMany
- Defined in:
- lib/mongoid/relations/bindings/referenced/many_to_many.rb
Overview
Binding class for all references_and_referenced_in_many relations.
Instance Attribute Summary
Attributes inherited from Mongoid::Relations::Binding
Instance Method Summary collapse
-
#bind_one(doc) ⇒ Object
Binds a single document with the inverse relation.
- #determine_inverse_metadata(doc) ⇒ Object
-
#inverse_record_id(doc) ⇒ Object
Find the inverse id referenced by inverse_keys.
-
#unbind_one(doc) ⇒ Object
Unbind a single document.
Methods inherited from Mongoid::Relations::Binding
Constructor Details
This class inherits a constructor from Mongoid::Relations::Binding
Instance Method Details
#bind_one(doc) ⇒ Object
Binds a single document with the inverse relation. Used specifically when appending to the proxy.
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/mongoid/relations/bindings/referenced/many_to_many.rb', line 19 def bind_one(doc) binding do inverse_keys = doc.you_must(.inverse_foreign_key) if inverse_keys inverse_keys.push(inverse_record_id(doc)) doc.reset_relation_criteria(.inverse) end base.synced[.foreign_key] = true doc.synced[.inverse_foreign_key] = true end end |
#determine_inverse_metadata(doc) ⇒ Object
60 61 62 |
# File 'lib/mongoid/relations/bindings/referenced/many_to_many.rb', line 60 def (doc) doc.relations[base.class.name.demodulize.underscore.pluralize] end |
#inverse_record_id(doc) ⇒ Object
Find the inverse id referenced by inverse_keys
51 52 53 54 55 56 57 58 |
# File 'lib/mongoid/relations/bindings/referenced/many_to_many.rb', line 51 def inverse_record_id(doc) = (doc) if base.__send__(.primary_key) else base.id end end |
#unbind_one(doc) ⇒ Object
Unbind a single document.
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/mongoid/relations/bindings/referenced/many_to_many.rb', line 37 def unbind_one(doc) binding do base.send(.foreign_key).delete_one(record_id(doc)) inverse_keys = doc.you_must(.inverse_foreign_key) if inverse_keys inverse_keys.delete_one(inverse_record_id(doc)) doc.reset_relation_criteria(.inverse) end base.synced[.foreign_key] = true doc.synced[.inverse_foreign_key] = true end end |