Module: Mongoid::Association::Referenced::HasMany::Buildable

Included in:
Mongoid::Association::Referenced::HasMany
Defined in:
lib/mongoid/association/referenced/has_many/buildable.rb

Overview

The Builder behavior for has_many associations.

Instance Method Summary collapse

Instance Method Details

#build(base, object, _type = nil, selected_fields = nil) ⇒ Document

This method either takes an _id or an object and queries for the inverse side using the id or sets the object.

Examples:

Build the document.

relation.build(meta, attrs)

Parameters:

  • base (Object)

    The base object.

  • object (Object)

    The object to use to build the association.

  • type (String)

    The type of document to query for.

  • selected_fields (nil) (defaults to: nil)

    Must be nil.

Returns:



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/mongoid/association/referenced/has_many/buildable.rb', line 21

def build(base, object, _type = nil, selected_fields = nil)
  return object || [] unless query?(object)

  # Handle array of hashes from $lookup aggregation
  if object.is_a?(Array) && object.all? { |o| o.is_a?(Hash) }
    return object.map do |attrs|
      Factory.execute_from_db(klass, attrs, nil, selected_fields, execute_callbacks: false)
    end
  end

  return [] if object.is_a?(Array)

  query_criteria(object, base)
end