Module: Mongoid::Association
Overview
Mixin module which adds association behavior to a ::Mongoid document. Adds methods such as #embedded? which indicate a document’s relative association state.
Constant Summary
-
MACRO_MAPPING =
# File 'lib/mongoid/association.rb', line 41
Map the macros to their corresponding
Associationclasses.{ embeds_one: Association::Embedded::EmbedsOne, embeds_many: Association::Embedded::EmbedsMany, embedded_in: Association::Embedded::EmbeddedIn, has_one: Association::Referenced::HasOne, has_many: Association::Referenced::HasMany, has_and_belongs_to_many: Association::Referenced::HasAndBelongsToMany, belongs_to: Association::Referenced::BelongsTo, }.freeze
Depending - Included
Depending - Attributes & Methods
Macros - Attributes & Methods
- .aliased_associations rw
- #aliased_associations rw
- .aliased_associations? ⇒ Boolean rw
- #aliased_associations? ⇒ Boolean rw
- .embedded rw
- .embedded? ⇒ Boolean rw
- .embedded_relations rw
- #embedded_relations rw
- .embedded_relations? ⇒ Boolean rw
- #embedded_relations? ⇒ Boolean rw
- .relations rw
- #relations rw
- .relations? ⇒ Boolean rw
- #relations? ⇒ Boolean rw
- .stored_as_associations rw
- #stored_as_associations rw
- .stored_as_associations? ⇒ Boolean rw
- #stored_as_associations? ⇒ Boolean rw
Association::Embedded::Cyclic - Attributes & Methods
- .cyclic rw
- #cyclic rw
- .cyclic? ⇒ Boolean rw
- #cyclic? ⇒ Boolean rw
Class Method Summary
Association::Reflections::ClassMethods - Extended
| reflect_on_all_associations | Returns all association metadata for the supplied macros. |
| reflect_on_association | Returns the association metadata for the supplied name. |
Association::Macros::ClassMethods - Extended
| belongs_to | |
| embedded_in | Adds the association back to the parent document. |
| embeds_many | Adds the association from a parent document to its children. |
| embeds_one | Adds the association from a parent document to its child. |
| has_and_belongs_to_many | |
| has_many | Adds a referenced association from a parent |
| has_one | |
| define_association! | |
Association::Referenced::Syncable::ClassMethods - Extended
| _synced |
|
| synced_destroy |
|
| synced_save |
|
Association::Referenced::CounterCache::ClassMethods - Extended
| decrement_counter | Decrement the counter name from the entries that match the id by one. |
| increment_counter | Increment the counter name from the entries that match the id by one. |
| reset_counters | Reset the given counter using the .count() query from the db. |
| update_counters | Update the given counters by the value factor. |
Association::Embedded::Cyclic::ClassMethods - Extended
| recursively_embeds_many | Create a cyclic embedded association that creates a tree hierarchy for the document and many embedded child documents. |
| recursively_embeds_one | Create a cyclic embedded association that creates a single self referencing relationship for a parent and a single child. |
| cyclic_child_name | Determines the child name given the class. |
| cyclic_parent_name | Determines the parent name given the class. |
Instance Attribute Summary
- #_association rw
-
#embedded? ⇒ true | false
rw
Determine if the document itself is embedded in another document via the proper channels.
-
#embedded_many? ⇒ true | false
readonly
Determine if the document is part of an embeds_many association.
-
#embedded_one? ⇒ true | false
readonly
Determine if the document is part of an embeds_one association.
-
#referenced_many? ⇒ true | false
readonly
Determine if the document is part of an references_many association.
-
#referenced_one? ⇒ true | false
readonly
Determine if the document is part of an references_one association.
Accessors - Included
| #without_autobuild? | Is the current code executing without autobuild functionality? |
Association::Referenced::AutoSave - Included
| #autosaved? | Used to prevent infinite loops in associated autosaves. |
Instance Method Summary
-
#association_name ⇒ Symbol
Get the association name for this document.
-
#reload_relations ⇒ Hash
Convenience method for iterating through the loaded associations and reloading them.
Reflections - Included
| #reflect_on_all_association | Returns all association metadata for the supplied macros. |
| #reflect_on_association | Returns the association metadata for the supplied name. |
Macros - Included
| #associations | This is convenience for libraries still on the old API. |
Builders - Included
| #parse_args | Parse out the attributes and the options from the args passed to a build_ or create_ methods. |
Depending - Included
| #apply_destroy_dependencies! | Perform all cascading deletes, destroys, or nullifies. |
| #_dependent_delete_all!, #_dependent_destroy!, #_dependent_nullify!, #_dependent_restrict_with_error!, #_dependent_restrict_with_exception! | |
Accessors - Included
| #__build__ | Builds the related document and creates the association unless the document is nil, then sets the association on this document. |
| #create_relation | Create an association from an object and association metadata. |
| #reset_relation_criteria | Resets the criteria inside the association proxy. |
| #set_relation |
|
| #_mongoid_filter_selected_fields | Returns a subset of __selected_fields attribute applicable to the (embedded) association with the given key, or nil if no projection is to be performed. |
| #get_relation | Get the association. |
| #needs_no_database_query?, | |
| #parse_args | Parse out the attributes and the options from the args passed to a build_ or create_ methods. |
| #without_autobuild | Yield to the block with autobuild functionality turned off. |
Association::Referenced::Syncable - Included
| #_syncable? | Is the document able to be synced on the inverse side? This is only if the key has changed and the association bindings have not been run. |
| #_synced | Get the synced foreign keys. |
| #_synced? | Has the document been synced for the foreign key? |
| #remove_inverse_keys | Update the inverse keys on destroy. |
| #update_inverse_keys | Update the inverse keys for the association. |
Association::Referenced::CounterCache - Included
| #reset_counters | Reset the given counter using the .count() query from the db. |
Association::Referenced::AutoSave - Included
| #__autosaving__ | Begin the associated autosave. |
| #changed_for_autosave? | Check if there is changes for auto-saving. |
DSL Calls
included
[ GitHub ]53 54 55 56
# File 'lib/mongoid/association.rb', line 53
included do class_attribute :polymorphic self.polymorphic = false end
Class Attribute Details
.aliased_associations (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 35
class_attribute :aliased_associations
.aliased_associations? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 35
class_attribute :aliased_associations
.cyclic (rw)
[ GitHub ]# File 'lib/mongoid/association/embedded/cyclic.rb', line 14
class_attribute :cyclic
.cyclic? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/embedded/cyclic.rb', line 14
class_attribute :cyclic
.dependents (rw)
[ GitHub ]# File 'lib/mongoid/association/depending.rb', line 13
class_attribute :dependents
.dependents? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/depending.rb', line 13
class_attribute :dependents
.dependents_owner (rw)
[ GitHub ]# File 'lib/mongoid/association/depending.rb', line 16
class_attribute :dependents_owner
.dependents_owner? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/depending.rb', line 16
class_attribute :dependents_owner
.embedded (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 11
class_attribute :, instance_reader: false
.embedded? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 11
class_attribute :, instance_reader: false
.embedded_relations (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 12
class_attribute :
.embedded_relations? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 12
class_attribute :
.relations (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 13
class_attribute :relations
.relations? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 13
class_attribute :relations
.stored_as_associations (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 39
class_attribute :stored_as_associations
.stored_as_associations? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 39
class_attribute :stored_as_associations
Instance Attribute Details
#_association (rw)
[ GitHub ]# File 'lib/mongoid/association.rb', line 51
attr_accessor :_association
#aliased_associations (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 35
class_attribute :aliased_associations
#aliased_associations? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 35
class_attribute :aliased_associations
#cyclic (rw)
[ GitHub ]# File 'lib/mongoid/association/embedded/cyclic.rb', line 14
class_attribute :cyclic
#cyclic? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/embedded/cyclic.rb', line 14
class_attribute :cyclic
#dependents (rw)
[ GitHub ]# File 'lib/mongoid/association/depending.rb', line 13
class_attribute :dependents
#dependents? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/depending.rb', line 13
class_attribute :dependents
#dependents_owner (rw)
[ GitHub ]# File 'lib/mongoid/association/depending.rb', line 16
class_attribute :dependents_owner
#dependents_owner? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/depending.rb', line 16
class_attribute :dependents_owner
#embedded? ⇒ true | false (rw)
Determine if the document itself is embedded in another document via the proper channels. (If it has a parent document.)
# File 'lib/mongoid/association.rb', line 65
def @embedded ||= (cyclic ? _parent.present? : self.class.) end
#embedded_many? ⇒ true | false (readonly)
Determine if the document is part of an embeds_many association.
# File 'lib/mongoid/association.rb', line 75
def _association && _association.is_a?(Association::Embedded::EmbedsMany) end
#embedded_one? ⇒ true | false (readonly)
Determine if the document is part of an embeds_one association.
# File 'lib/mongoid/association.rb', line 85
def _association && _association.is_a?(Association::Embedded::EmbedsOne) end
#embedded_relations (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 12
class_attribute :
#embedded_relations? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 12
class_attribute :
#referenced_many? ⇒ true | false (readonly)
Determine if the document is part of an references_many association.
# File 'lib/mongoid/association.rb', line 109
def referenced_many? _association && _association.is_a?(Association::Referenced::HasMany) end
#referenced_one? ⇒ true | false (readonly)
Determine if the document is part of an references_one association.
# File 'lib/mongoid/association.rb', line 119
def referenced_one? _association && _association.is_a?(Association::Referenced::HasOne) end
#relations (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 13
class_attribute :relations
#relations? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 13
class_attribute :relations
#stored_as_associations (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 39
class_attribute :stored_as_associations
#stored_as_associations? ⇒ Boolean (rw)
[ GitHub ]# File 'lib/mongoid/association/macros.rb', line 39
class_attribute :stored_as_associations
Instance Method Details
#association_name ⇒ Symbol
Get the association name for this document. If no association was defined
an error will be raised.
# File 'lib/mongoid/association.rb', line 98
def association_name raise Errors::NoMetadata.new(self.class.name) unless _association _association.name end
#reload_relations ⇒ Hash
Convenience method for iterating through the loaded associations and reloading them.
# File 'lib/mongoid/association.rb', line 130
def reload_relations relations.each_pair do |name, | if instance_variable_defined?("@_#{name}") if _parent.nil? || instance_variable_get("@_#{name}") != _parent remove_instance_variable("@_#{name}") end end end end