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

Inherits:
Object
  • Object
show all
Includes:
Buildable, 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.

Since:

  • 7.0

Defined Under Namespace

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

Constant Summary collapse

ASSOCIATION_OPTIONS =

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

Returns:

  • (Array<Symbol>)

    The extra valid options.

Since:

  • 7.0

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

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

Returns:

  • (Array<Symbol>)

    The valid options.

Since:

  • 7.0

(ASSOCIATION_OPTIONS + SHARED_OPTIONS).freeze
FOREIGN_KEY_SUFFIX =

The default foreign key suffix.

Returns:

  • (String)

    '_id'

Since:

  • 7.0

'_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

Instance Method Summary collapse

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, #initialize, #inverse, #inverse_association, #inverse_class, #inverse_class_name, #inverse_setter, #inverse_type, #inverse_type_setter, #inverses, #key, #klass, #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

Methods included from Constrainable

#convert_to_foreign_key

Instance Method Details

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

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

polymorphic.

Parameters:

  • criteria (Mongoid::Criteria)

    The criteria object to add to.

  • object_class (Class)

    The object class.

Returns:

Since:

  • 7.0



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

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.

Parameters:

  • doc (Document)

    The document to be bound.

Returns:

  • (true, false)

    Whether the document can be bound.

Since:

  • 7.0



183
184
185
# File 'lib/mongoid/association/referenced/has_many.rb', line 183

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

#criteria(base) ⇒ Mongoid::Criteria

The criteria used for querying this relation.

Returns:

Since:

  • 7.0



136
137
138
# File 'lib/mongoid/association/referenced/has_many.rb', line 136

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

#embedded?false

Is this association type embedded?

Returns:

  • (false)

    Always false.

Since:

  • 7.0



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

def embedded?; false; end

#foreign_keyString

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

Returns:

  • (String)

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

Since:

  • 7.0



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

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.

Parameters:

  • attributes (Hash)

    The attributes to use to build the association object.

  • options (Hash)

    The options for the association.

Returns:

Since:

  • 7.0



195
196
197
# File 'lib/mongoid/association/referenced/has_many.rb', line 195

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)

Parameters:

  • document (Document)

    The document to calculate on.

Returns:

  • (Root)

    The root atomic path calculator.

Since:

  • 2.1.0



209
210
211
# File 'lib/mongoid/association/referenced/has_many.rb', line 209

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

#polymorphic?true, false

Is this association polymorphic?

Returns:

  • (true, false)

    Whether this association is polymorphic.

Since:

  • 7.0



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

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

#relationAssociation::HasMany::Proxy

Get the relation proxy class for this association type.

Returns:

  • (Association::HasMany::Proxy)

    The proxy class.

Since:

  • 7.0



127
128
129
# File 'lib/mongoid/association/referenced/has_many.rb', line 127

def relation
  Proxy
end

#relation_complementsArray<Association>

The list of association complements.

Returns:

  • (Array<Association>)

    The association complements.

Since:

  • 7.0



57
58
59
# File 'lib/mongoid/association/referenced/has_many.rb', line 57

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

#setup!self

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

Returns:

  • (self)

Since:

  • 7.0



66
67
68
69
# File 'lib/mongoid/association/referenced/has_many.rb', line 66

def setup!
  setup_instance_methods!
  self
end

#setup_instance_methods!self

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

Returns:

  • (self)

Since:

  • 7.0



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/mongoid/association/referenced/has_many.rb', line 76

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?

Returns:

  • (true)

    Always true.

Since:

  • 7.0



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

def stores_foreign_key?; false; end

#typeString?

Note:

Only relevant for polymorphic relations.

The type of this association if it's polymorphic.

Returns:

  • (String, nil)

    The type field.

Since:

  • 7.0



147
148
149
# File 'lib/mongoid/association/referenced/has_many.rb', line 147

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

#validation_defaulttrue

The default for validation the association object.

Returns:

  • (true)

    Always true.

Since:

  • 7.0



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

def validation_default; true; end