123456789_123456789_123456789_123456789_123456789_

Module: Mongoid::Association::Embedded::EmbedsMany::Buildable

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
Defined in: lib/mongoid/association/embedded/embeds_many/buildable.rb

Overview

Builder class for embeds_many associations.

Instance Attribute Summary

::Mongoid::Threaded::Lifecycle - Included

#_assigning

Begin the assignment of attributes.

#_assigning?

Is the current thread in assigning mode?

#_binding

Execute a block in binding mode.

#_binding?

Is the current thread in binding mode?

#_building

Execute a block in building mode.

#_building?

Is the current thread in building mode?

#_creating?

Is the current thread in creating mode?

#_loading

Execute a block in loading mode.

#_loading?

Is the current thread in loading mode?

Instance Method Summary

Instance Method Details

#build(base, object, type = nil, selected_fields = nil) ⇒ Array<Document ] The documents.

Builds the document out of the attributes using the provided association metadata. Instantiates through the factory in order to make sure subclasses and allocation are used if fitting. This case will return many documents.

Examples:

Build the documents.

Builder.new(meta, attrs).build

Parameters:

  • base (Document)

    The base object.

  • object (Array<Document> | Array<Hash>)

    The object to use to build the association.

  • type (String) (defaults to: nil)

    Not used in this context.

  • selected_fields (Hash) (defaults to: nil)

    ::Mongoid::Fields which were retrieved via #only. If selected_fields are specified, fields not listed in it will not be accessible in the built documents.

Returns:

  • (Array<Document ] The documents.)

    Array<Document ] The documents.

[ GitHub ]

  
# File 'lib/mongoid/association/embedded/embeds_many/buildable.rb', line 30

def build(base, object, type = nil, selected_fields = nil)
  return [] if object.blank?
  return object if object.first.is_a?(Document)
  docs = []
  object.each do |attrs|
    if _loading? && base.persisted?
      docs.push(Factory.execute_from_db(klass, attrs, nil, selected_fields, execute_callbacks: false))
    else
      docs.push(Factory.build(klass, attrs))
    end
  end
  docs
end