class Mongoid::Association::Referenced::BelongsTo
The BelongsTo type association.
@since 7.0
Constants
- ASSOCIATION_OPTIONS
The options available for this type of association, in addition to the common ones.
@return [ Array<Symbol> ] The extra valid options.
@since 7.0
- FOREIGN_KEY_FIELD_TYPE
The type of the field holding the foreign key.
@return [ Object ]
@since 7.0
- FOREIGN_KEY_SUFFIX
The default foreign key suffix.
@return [ String ] '_id'
@since 7.0
- VALID_OPTIONS
The complete list of valid options for this association, including the shared ones.
@return [ Array<Symbol> ] The valid options.
@since 7.0
Public Instance Methods
Is this association type embedded?
@return [ false ] Always false.
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 91 def embedded?; false; end
Get the foreign key field for saving the association reference.
@return [ String ] The foreign key field for saving the association reference.
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 105 def foreign_key @foreign_key ||= @options[:foreign_key] ? @options[:foreign_key].to_s : default_foreign_key_field end
The name of the field used to store the type of polymorphic relation.
@return [ String ] The field used to store the type of polymorphic relation.
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 133 def inverse_type (@inverse_type ||= "#{name}_type") if polymorphic? end
The nested builder object.
@param [ Hash ] attributes The attributes to use to build the association object. @param [ Hash ] options The options for the association.
@return [ Association::Nested::One ] The Nested Builder object.
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 145 def nested_builder(attributes, options) Nested::One.new(self, attributes, options) end
Get the path calculator for the supplied document.
@example Get the path calculator.
association.path(document)
@param [ Document ] document The document to calculate on.
@return [ Root ] The root atomic path calculator.
@since 2.1.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 159 def path(document) Mongoid::Atomic::Paths::Root.new(document) end
Is this association polymorphic?
@return [ true, false ] Whether this association is polymorphic.
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 124 def polymorphic? @polymorphic ||= !!@options[:polymorphic] end
Get the relation proxy class for this association type.
@return [ Association::BelongsTo::Proxy ] The proxy class.
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 115 def relation Proxy end
The list of association complements.
@return [ Array<Association> ] The association complements.
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 64 def relation_complements @relation_complements ||= [ HasMany, HasOne ].freeze end
Setup the instance methods, fields, etc. on the association owning class.
@return [ self ]
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 73 def setup! setup_instance_methods! @owner_class.aliased_fields[name.to_s] = foreign_key self end
Does this association type store the foreign key?
@return [ true ] Always true.
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 84 def stores_foreign_key?; true; end
The default for validation the association object.
@return [ false ] Always false.
@since 7.0
# File lib/mongoid/association/referenced/belongs_to.rb, line 98 def validation_default; false; end
Private Instance Methods
# File lib/mongoid/association/referenced/belongs_to.rb, line 235 def create_foreign_key_field! @owner_class.field( foreign_key, type: FOREIGN_KEY_FIELD_TYPE, identity: true, overwrite: true, association: self, default: nil ) end
# File lib/mongoid/association/referenced/belongs_to.rb, line 194 def default_foreign_key_field @default_foreign_key_field ||= "#{name}#{FOREIGN_KEY_SUFFIX}" end
# File lib/mongoid/association/referenced/belongs_to.rb, line 190 def default_primary_key PRIMARY_KEY_DEFAULT end
# File lib/mongoid/association/referenced/belongs_to.rb, line 216 def determine_inverses(other) matches = (other || relation_class).relations.values.select do |rel| relation_complements.include?(rel.class) && rel.relation_class_name == inverse_class_name end if matches.size > 1 raise Errors::AmbiguousRelationship.new(relation_class, @owner_class, name, matches) end matches.collect { |m| m.name } end
# File lib/mongoid/association/referenced/belongs_to.rb, line 182 def index_spec if polymorphic? { key => 1, inverse_type => 1 } else { key => 1 } end end
# File lib/mongoid/association/referenced/belongs_to.rb, line 198 def polymorph! if polymorphic? @owner_class.polymorphic = true @owner_class.field(inverse_type, type: String) end end
# File lib/mongoid/association/referenced/belongs_to.rb, line 205 def polymorphic_inverses(other = nil) if other matches = other.relations.values.select do |rel| relation_complements.include?(rel.class) && rel.as == name && rel.relation_class_name == inverse_class_name end matches.collect { |m| m.name } end end
If set to true, then the associated object will be validated when this object is saved
# File lib/mongoid/association/referenced/belongs_to.rb, line 229 def require_association? required = @options[:required] if @options.key?(:required) required = !@options[:optional] if @options.key?(:optional) && required.nil? required.nil? ? Mongoid.belongs_to_required_by_default : required end
# File lib/mongoid/association/referenced/belongs_to.rb, line 165 def setup_instance_methods! define_getter! define_setter! define_existence_check! define_builder! define_creator! define_autosaver! define_counter_cache_callbacks! polymorph! define_dependency! create_foreign_key_field! setup_index! define_touchable! @owner_class.validates_associated(name) if validate? @owner_class.validates(name, presence: true) if require_association? end