Class: Mongoid::Association::Referenced::BelongsTo
| Relationships & Source Files | |
| Namespace Children | |
| Modules: | |
| Classes: | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Instance Chain: | |
| Inherits: | Object | 
| Defined in: | lib/mongoid/association/referenced/belongs_to.rb, lib/mongoid/association/referenced/belongs_to/binding.rb, lib/mongoid/association/referenced/belongs_to/buildable.rb, lib/mongoid/association/referenced/belongs_to/eager.rb, lib/mongoid/association/referenced/belongs_to/proxy.rb | 
Overview
The BelongsTo type association.
Constant Summary
- 
    ASSOCIATION_OPTIONS =
    # File 'lib/mongoid/association/referenced/belongs_to.rb', line 22The options available for this type of association, in addition to the common ones. [ :autobuild, :autosave, :counter_cache, :dependent, :foreign_key, :index, :polymorphic, :primary_key, :touch, :optional, :required, :scope, ].freeze
- 
    FOREIGN_KEY_FIELD_TYPE =
    # File 'lib/mongoid/association/referenced/belongs_to.rb', line 46The type of the field holding the foreign key. Object
- 
    FOREIGN_KEY_SUFFIX =
    # File 'lib/mongoid/association/referenced/belongs_to.rb', line 51The default foreign key suffix. '_id'.freeze 
- 
    VALID_OPTIONS =
    # File 'lib/mongoid/association/referenced/belongs_to.rb', line 41The complete list of valid options for this association, including the shared ones. (ASSOCIATION_OPTIONS + SHARED_OPTIONS).freeze 
::Mongoid::Association::Relatable - Included
  
Instance Attribute Summary
- 
    
      #embedded?  ⇒ false 
    
    readonly
    Is this association type embedded? 
- 
    
      #polymorphic?  ⇒ true | false 
    
    readonly
    Is this association polymorphic? 
- 
    
      #stores_foreign_key?  ⇒ true 
    
    readonly
    Does this association type store the foreign key? 
- 
    
      #require_association?  ⇒ Boolean 
    
    readonly
    private
    If set to true, then the associated object will be validated when this object is saved. 
::Mongoid::Association::Relatable - Included
| #destructive? | Whether the dependent method is destructive. | 
| #in_to? | Is this association an embedded_in or belongs_to association? | 
| #many? | Is this association an embeds_many or has_many association? | 
| #name | The name of the association. | 
| #one? | Is this association an embeds_one or has_one association? | 
| #options | The options on this association. | 
| #parent_inclusions | The associations above this one in the inclusion tree. | 
| #parent_inclusions= | The associations above this one in the inclusion tree. | 
| #validate? | Whether the associated object(s) should be validated. | 
::Mongoid::Association::Options - Included
| #autobuilding? | Whether the association is autobuilding. | 
| #autosave | 
 | 
| #autosave? | Alias for Options#autosave. | 
| #cascading_callbacks? | Whether the association has callbacks cascaded down from the parent. | 
| #counter_cached? | Whether the association is counter-cached. | 
| #cyclic? | Is the association cyclic. | 
| #forced_nil_inverse? | Whether the association has forced nil inverse (So no foreign keys are saved). | 
| #indexed? | Whether to index the primary or foreign key field. | 
| #polymorphic? | Whether this association is polymorphic. | 
| #touchable? | Whether the association object should be automatically touched when its inverse object is updated. | 
Instance Method Summary
- 
    
      #foreign_key  ⇒ String 
    
    Get the foreign key field for saving the association reference. 
- 
    
      #inverse_type  ⇒ String 
    
    The name of the field used to store the type of polymorphic association. 
- 
    
      #nested_builder(attributes, options)  ⇒ Association::Nested::One 
    
    The nested builder object. 
- 
    
      #path(document)  ⇒ Root 
    
    Get the path calculator for the supplied document. 
- 
    
      #relation  ⇒ Association::BelongsTo::Proxy 
    
    Get the association proxy class for this association type. 
- 
    
      #relation_complements  ⇒ Array<Mongoid::Association::Relatable> 
    
    The list of association complements. 
- 
    
      #resolver  ⇒ nil | Mongoid::ModelResolver 
    
    Returns the object responsible for converting polymorphic type references into class objects, and vice versa. 
- 
    
      #scope  ⇒ Proc | Symbol | nil 
    
    Get the scope to be applied when querying the association. 
- 
    
      #setup!  ⇒ self 
    
    Setup the instance methods, fields, etc. 
- 
    
      #validation_default  ⇒ false 
    
    The default for validation the association object. 
- #create_foreign_key_field! private
- #default_foreign_key_field private
- #default_primary_key private
- #determine_inverses(other) private
- #index_spec private
- #polymorph! private
- #polymorphic_inverses(other = nil) private
- #setup_instance_methods! private
Buildable - Included
| #build | This method either takes an _id or an object and queries for the inverse side using the id or sets the object. | 
| #execute_query, #query?, #query_criteria | |
::Mongoid::Association::Relatable - Included
| #== | Compare this association to another. | 
| #bindable? | Whether trying to bind an object using this association should raise an error. | 
| #class_name | |
| #counter_cache_column_name | Get the counter cache column name. | 
| #create_relation | Create an association proxy object using the owner and target. | 
| #extension | Get the extension. | 
| #foreign_key_check | Get the name of the method to check if the foreign key has changed. | 
| #foreign_key_setter | The name of the foreign key setter method. | 
| #get_callbacks | Get the callbacks for a given type. | 
| #initialize | Initialize the  | 
| #inverse | Get the inverse name. | 
| #inverse_association | Get the inverse’s association metadata. | 
| #inverse_class | The class of the object owning this association. | 
| #inverse_class_name | The class name of the object owning this association. | 
| #inverse_klass | |
| #inverse_setter | The name of the inverse setter method. | 
| #inverse_type | Get the inverse type. | 
| #inverse_type_setter | Gets the setter for the field that sets the type of document on a polymorphic association. | 
| #inverses | Get the inverse names. | 
| #key | The foreign key field if this association stores a foreign key. | 
| #klass | |
| #path | The atomic path for this association. | 
| #relation_class | The class of the association object(s). | 
| #relation_class_name | 
 | 
| #setter | The name of the setter on this object for assigning an associated object. | 
| #type_setter | Get the type setter. | 
| #create_extension!, #default_inverse, #define_autosaver!, #define_builder!, #define_counter_cache_callbacks!, #define_creator!, #define_dependency!, #define_existence_check!, #define_getter!, #define_ids_getter!, #define_ids_setter!, #define_setter!, #define_touchable!, | |
| #inverse_association_classes | Gets the model classes with inverse associations of this model. | 
| #namespace_hierarchy | Returns an array of classes/modules forming the namespace hierarchy where symbols referenced in the provided class/module would be looked up by Ruby. | 
| #polymorph!, | |
| #resolve_name | Resolves the given class/module name in the context of the specified module, as Ruby would when a constant is referenced in the source. | 
| #setup_index!, #validate! | |
::Mongoid::Association::Options - Included
| #as | Returns the name of the parent to a polymorphic child. | 
| #dependent | Specify what happens to the associated object when the owner is destroyed. | 
| #inverse_of | The name the owning object uses to refer to this association. | 
| #order | The custom sorting options on the association. | 
| #primary_key | 
 | 
| #store_as | The store_as option. | 
| #touch_field | The field for saving the associated object’s type. | 
| #type | The field for saving the associated object’s type. | 
::Mongoid::Association::Constrainable - Included
| #convert_to_foreign_key | Convert the supplied object to the appropriate type to set as the foreign key for an association. | 
| #convert_polymorphic | |
Instance Attribute Details
    #embedded?  ⇒ false  (readonly)
  
Is this association type embedded?
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 77
def ; false; end
    #polymorphic?  ⇒ true | false  (readonly)
  
Is this association polymorphic?
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 102
def polymorphic? @polymorphic ||= !!@options[:polymorphic] end
#require_association? ⇒ Boolean (readonly, private)
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 223
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
    #stores_foreign_key?  ⇒ true  (readonly)
  
Does this association type store the foreign key?
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 72
def stores_foreign_key?; true; end
Instance Method Details
#create_foreign_key_field! (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to.rb', line 229
def create_foreign_key_field! @owner_class.field( foreign_key, type: FOREIGN_KEY_FIELD_TYPE, identity: true, overwrite: true, association: self, default: nil ) end
#default_foreign_key_field (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to.rb', line 188
def default_foreign_key_field @default_foreign_key_field ||= "#{name}#{FOREIGN_KEY_SUFFIX}" end
#default_primary_key (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to.rb', line 184
def default_primary_key PRIMARY_KEY_DEFAULT end
#determine_inverses(other) (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to.rb', line 210
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
#foreign_key ⇒ String
Get the foreign key field for saving the association reference.
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 87
def foreign_key @foreign_key ||= @options[:foreign_key] ? @options[:foreign_key].to_s : default_foreign_key_field end
#index_spec (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to.rb', line 176
def index_spec if polymorphic? { key => 1, inverse_type => 1 } else { key => 1 } end end
#inverse_type ⇒ String
The name of the field used to store the type of polymorphic association.
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 124
def inverse_type (@inverse_type ||= "#{name}_type") if polymorphic? end
#nested_builder(attributes, options) ⇒ Association::Nested::One
The nested builder object.
    #path(document)  ⇒ Root 
  
Get the path calculator for the supplied document.
#polymorph! (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to.rb', line 192
def polymorph! if polymorphic? @owner_class.polymorphic = true @owner_class.field(inverse_type, type: String) end end
#polymorphic_inverses(other = nil) (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to.rb', line 199
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
    #relation  ⇒ Association::BelongsTo::Proxy 
  
Get the association proxy class for this association type.
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 95
def relation Proxy end
#relation_complements ⇒ Array<Mongoid::Association::Relatable>
The list of association complements.
    #resolver  ⇒ nil | Mongoid::ModelResolver 
  
Returns the object responsible for converting polymorphic type references into class objects, and vice versa. This is obtained via the :polymorphic option that was given when the association was defined.
See Mongoid::ModelResolver.resolver for how the :polymorphic option is interpreted here.
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 117
def resolver @resolver ||= Mongoid::ModelResolver.resolver(@options[:polymorphic]) end
    #scope  ⇒ Proc | Symbol | nil 
  
Get the scope to be applied when querying the association.
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 153
def scope @options[:scope] end
    #setup!  ⇒ self 
  
Setup the instance methods, fields, etc. on the association owning class.
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 63
def setup! setup_instance_methods! @owner_class.aliased_fields[name.to_s] = foreign_key self end
#setup_instance_methods! (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to.rb', line 159
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? || require_association? @owner_class.validates(name, presence: true) if require_association? end
    #validation_default  ⇒ false 
  
The default for validation the association object.
# File 'lib/mongoid/association/referenced/belongs_to.rb', line 82
def validation_default; false; end