Class: Mongoid::Association::Referenced::HasMany

Inherits:
Object
  • Object
show all
Includes:
Buildable, WithPolymorphicCriteria, Mongoid::Association::Relatable
Defined in:
lib/mongoid/association/referenced/has_many.rb,
lib/mongoid/association/referenced/has_many/eager.rb,
lib/mongoid/association/referenced/has_many/proxy.rb,
lib/mongoid/association/referenced/has_many/binding.rb,
lib/mongoid/association/referenced/has_many/buildable.rb,
lib/mongoid/association/referenced/has_many/enumerable.rb

Overview

The has_many association.

Defined Under Namespace

Modules: Buildable Classes: Binding, Eager, Enumerable, Proxy

Constant Summary collapse

ASSOCIATION_OPTIONS =

The options available for this type of association, in addition to the common ones.

[
    :after_add,
    :after_remove,
    :as,
    :autosave,
    :before_add,
    :before_remove,
    :dependent,
    :foreign_key,
    :order,
    :primary_key,
    :scope,
].freeze
VALID_OPTIONS =

The complete list of valid options for this association, including the shared ones.

(ASSOCIATION_OPTIONS + SHARED_OPTIONS).freeze
FOREIGN_KEY_SUFFIX =

The default foreign key suffix.

'_id'.freeze

Constants included from Mongoid::Association::Relatable

Mongoid::Association::Relatable::PRIMARY_KEY_DEFAULT, Mongoid::Association::Relatable::SHARED_OPTIONS

Instance Attribute Summary

Attributes included from Mongoid::Association::Relatable

#name, #options, #parent_inclusions

Instance Method Summary collapse

Methods included from WithPolymorphicCriteria

#with_polymorphic_criterion

Methods included from Buildable

#build

Methods included from Mongoid::Association::Relatable

#==, #counter_cache_column_name, #create_relation, #destructive?, #extension, #foreign_key_check, #foreign_key_setter, #get_callbacks, #in_to?, #initialize, #inverse, #inverse_association, #inverse_class, #inverse_class_name, #inverse_setter, #inverse_type, #inverse_type_setter, #inverses, #key, #many?, #one?, #relation_class, #relation_class_name, #setter, #type_setter, #validate?

Methods included from Options

#as, #autobuilding?, #autosave, #cascading_callbacks?, #counter_cached?, #cyclic?, #dependent, #forced_nil_inverse?, #indexed?, #inverse_of, #order, #primary_key, #store_as, #touch_field, #touchable?

Methods included from Constrainable

#convert_to_foreign_key

Instance Method Details

#add_polymorphic_criterion(criteria, object_class) ⇒ Mongoid::Criteria

Deprecated.

in 9.0.x

Add polymorphic query criteria to a Criteria object, if this association is

polymorphic.

It appears as if this method is an artifact left over from a refactoring that renamed it ‘with_polymorphic_criterion`, and made it private. Regardless, this method isn’t referenced anywhere else, and is unlikely to be useful to external clients. We should remove it.



142
143
144
145
146
147
148
# File 'lib/mongoid/association/referenced/has_many.rb', line 142

def add_polymorphic_criterion(criteria, object_class)
  if polymorphic?
    criteria.where(type => object_class.name)
  else
    criteria
  end
end

#bindable?(doc) ⇒ true | false

Whether trying to bind an object using this association should raise an error.



164
165
166
# File 'lib/mongoid/association/referenced/has_many.rb', line 164

def bindable?(doc)
  forced_nil_inverse? || (!!inverse && doc.fields.keys.include?(foreign_key))
end

#criteria(base) ⇒ Mongoid::Criteria

The criteria used for querying this association.



116
117
118
# File 'lib/mongoid/association/referenced/has_many.rb', line 116

def criteria(base)
  query_criteria(base.send(primary_key), base)
end

#embedded?false

Is this association type embedded?



94
# File 'lib/mongoid/association/referenced/has_many.rb', line 94

def embedded?; false; end

#foreign_keyString

Get the foreign key field on the inverse for saving the association reference.



86
87
88
89
# File 'lib/mongoid/association/referenced/has_many.rb', line 86

def foreign_key
  @foreign_key ||= @options[:foreign_key] ? @options[:foreign_key].to_s :
                     default_foreign_key_field
end

#nested_builder(attributes, options) ⇒ Association::Nested::Many

The nested builder object.



174
175
176
# File 'lib/mongoid/association/referenced/has_many.rb', line 174

def nested_builder(attributes, options)
  Nested::Many.new(self, attributes, options)
end

#path(document) ⇒ Root

Get the path calculator for the supplied document.

Examples:

Get the path calculator.

Proxy.path(document)


186
187
188
# File 'lib/mongoid/association/referenced/has_many.rb', line 186

def path(document)
  Mongoid::Atomic::Paths::Root.new(document)
end

#polymorphic?true | false

Is this association polymorphic?



154
155
156
# File 'lib/mongoid/association/referenced/has_many.rb', line 154

def polymorphic?
  @polymorphic ||= !!as
end

#relationAssociation::HasMany::Proxy

Get the association proxy class for this association type.



109
110
111
# File 'lib/mongoid/association/referenced/has_many.rb', line 109

def relation
  Proxy
end

#relation_complementsArray<Mongoid::Association::Relatable>

The list of association complements.



53
54
55
# File 'lib/mongoid/association/referenced/has_many.rb', line 53

def relation_complements
  @relation_complements ||= [ Referenced::BelongsTo ].freeze
end

#scopeProc | Symbol | nil

Get the scope to be applied when querying the association.



193
194
195
# File 'lib/mongoid/association/referenced/has_many.rb', line 193

def scope
  @options[:scope]
end

#setup!self

Setup the instance methods, fields, etc. on the association owning class.



60
61
62
63
# File 'lib/mongoid/association/referenced/has_many.rb', line 60

def setup!
  setup_instance_methods!
  self
end

#setup_instance_methods!self

Setup the instance methods on the class having this association type.



68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/mongoid/association/referenced/has_many.rb', line 68

def setup_instance_methods!
  define_getter!
  define_ids_getter!
  define_setter!
  define_ids_setter!
  define_existence_check!
  define_autosaver!
  polymorph!
  define_dependency!
  @owner_class.validates_associated(name) if validate?
  self
end

#stores_foreign_key?true

Does this association type store the foreign key?



104
# File 'lib/mongoid/association/referenced/has_many.rb', line 104

def stores_foreign_key?; false; end

#typeString | nil

Note:

Only relevant for polymorphic associations.

The type of this association if it’s polymorphic.



125
126
127
# File 'lib/mongoid/association/referenced/has_many.rb', line 125

def type
  @type ||= "#{as}_type" if polymorphic?
end

#validation_defaulttrue

The default for validation the association object.



99
# File 'lib/mongoid/association/referenced/has_many.rb', line 99

def validation_default; true; end