module Mongoid::Association
Mixin module which adds association behavior to a Mongoid
document. Adds methods such as embedded?
which indicate a document’s relative association state.
Constants
- MACRO_MAPPING
Map the macros to their corresponding
Association
classes.@return [ Hash ] The mapping from macros to their
Association
class.
Attributes
Public Class Methods
Apply ordering to the criteria if it was defined on the association.
@example Apply the ordering.
Proxy.apply_ordering(criteria, association)
@param [ Criteria
] criteria The criteria to modify. @param [ Mongoid::Association::Relatable
] association The association metadata.
@return [ Criteria
] The ordered criteria.
# File lib/mongoid/association/proxy.rb, line 206 def apply_ordering(criteria, association) association.order ? criteria.order_by(association.order) : criteria end
Public Instance Methods
Get the association name for this document. If no association was defined
an error will be raised.
@example Get the association name.
document.association_name
@raise [ Errors::NoMetadata
] If no association metadata is present.
@return [ Symbol ] The association name.
# File lib/mongoid/association.rb, line 98 def association_name raise Errors::NoMetadata.new(self.class.name) unless _association _association.name end
Determine if the document itself is embedded in another document via the proper channels. (If it has a parent document.)
@example Is the document embedded?
address.embedded?
@return [ true | false ] True if the document has a parent document.
# File lib/mongoid/association.rb, line 65 def embedded? @embedded ||= (cyclic ? _parent.present? : self.class.embedded?) end
Determine if the document is part of an embeds_many association.
@example Is the document in an embeds many?
address.embedded_many?
@return [ true | false ] True if in an embeds many.
# File lib/mongoid/association.rb, line 75 def embedded_many? _association && _association.is_a?(Association::Embedded::EmbedsMany) end
Determine if the document is part of an embeds_one association.
@example Is the document in an embeds one?
address.embedded_one?
@return [ true | false ] True if in an embeds one.
# File lib/mongoid/association.rb, line 85 def embedded_one? _association && _association.is_a?(Association::Embedded::EmbedsOne) end
Determine if the document is part of an references_many association.
@example Is the document in a references many?
post.referenced_many?
@return [ true | false ] True if in a references many.
# File lib/mongoid/association.rb, line 109 def referenced_many? _association && _association.is_a?(Association::Referenced::HasMany) end
Determine if the document is part of an references_one association.
@example Is the document in a references one?
address.referenced_one?
@return [ true | false ] True if in a references one.
# File lib/mongoid/association.rb, line 119 def referenced_one? _association && _association.is_a?(Association::Referenced::HasOne) end
Convenience method for iterating through the loaded associations and reloading them.
@example Reload the associations.
document.reload_relations
@return [ Hash ] The association metadata.
# File lib/mongoid/association.rb, line 130 def reload_relations relations.each_pair do |name, meta| if instance_variable_defined?("@_#{name}") if _parent.nil? || instance_variable_get("@_#{name}") != _parent remove_instance_variable("@_#{name}") end end end end