Class: Mongoid::Relations::Many

Inherits:
Proxy
  • Object
show all
Defined in:
lib/mongoid/relations/many.rb

Overview

This is the superclass for all many to one and many to many relation proxies.

Direct Known Subclasses

Embedded::Many, Referenced::Many

Instance Attribute Summary

Attributes inherited from Proxy

#__metadata, #base, #target

Instance Method Summary (collapse)

Methods inherited from Proxy

apply_ordering, #extend_proxies, #init, #klass, #reset_unloaded, #substitutable, #with

Methods included from Marshalable

#marshal_dump, #marshal_load

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Mongoid::Relations::Proxy

Instance Method Details

- (true, false) blank?

Is the relation empty?

Examples:

Is the relation empty??

person.addresses.blank?

Returns:

  • (true, false)

    If the relation is empty or not.

Since:

  • 2.1.0



20
21
22
# File 'lib/mongoid/relations/many.rb', line 20

def blank?
  size == 0
end

- (Document) create(attributes = nil, options = {}, type = nil) - (Document) create(attributes = nil, type = nil)

Creates a new document on the references many relation. This will save the document if the parent has been persisted.

Examples:

Create and save the new document.

person.posts.create(:text => "Testing")

Overloads:

  • - (Document) create(attributes = nil, options = {}, type = nil)

    Parameters:

    • attributes (Hash) (defaults to: nil)

      The attributes to create with.

    • options (Hash) (defaults to: {})

      The scoped assignment options.

    • type (Class) (defaults to: nil)

      The optional type of document to create.

  • - (Document) create(attributes = nil, type = nil)

    Parameters:

    • attributes (Hash) (defaults to: nil)

      The attributes to create with.

    • type (Class) (defaults to: nil)

      The optional type of document to create.

Returns:

  • (Document)

    The newly created document.

Since:

  • 2.0.0.beta.1



42
43
44
45
46
47
48
49
50
# File 'lib/mongoid/relations/many.rb', line 42

def create(attributes = nil, type = nil, &block)
  if attributes.is_a?(::Array)
    attributes.map { |attrs| create(attrs, type, &block) }
  else
    doc = build(attributes, type, &block)
    base.persisted? ? doc.save : raise_unsaved(doc)
    doc
  end
end

- (Document) create!(attributes = nil, options = {}, type = nil) - (Document) create!(attributes = nil, type = nil)

Creates a new document on the references many relation. This will save the document if the parent has been persisted and will raise an error if validation fails.

Examples:

Create and save the new document.

person.posts.create!(:text => "Testing")

Overloads:

  • - (Document) create!(attributes = nil, options = {}, type = nil)

    Parameters:

    • attributes (Hash) (defaults to: nil)

      The attributes to create with.

    • type (Class) (defaults to: nil)

      The optional type of document to create.

  • - (Document) create!(attributes = nil, type = nil)

    Parameters:

    • attributes (Hash) (defaults to: nil)

      The attributes to create with.

    • type (Class) (defaults to: nil)

      The optional type of document to create.

Returns:

  • (Document)

    The newly created document.

Raises:

Since:

  • 2.0.0.beta.1



72
73
74
75
76
77
78
79
80
# File 'lib/mongoid/relations/many.rb', line 72

def create!(attributes = nil, type = nil, &block)
  if attributes.is_a?(::Array)
    attributes.map { |attrs| create!(attrs, type, &block) }
  else
    doc = build(attributes, type, &block)
    base.persisted? ? doc.save! : raise_unsaved(doc)
    doc
  end
end

- (Document) find_or_create_by(attributes = nil, type = nil) - (Document) find_or_create_by(attributes = nil, type = nil)

Find the first document given the conditions, or creates a new document with the conditions that were supplied.

Examples:

Find or create.

person.posts.find_or_create_by(:title => "Testing")

Overloads:

  • - (Document) find_or_create_by(attributes = nil, type = nil)

    Parameters:

    • attributes (Hash) (defaults to: nil)

      The attributes to search or create with.

    • type (Class) (defaults to: nil)

      The optional type of document to create.

  • - (Document) find_or_create_by(attributes = nil, type = nil)

    Parameters:

    • attributes (Hash) (defaults to: nil)

      The attributes to search or create with.

    • type (Class) (defaults to: nil)

      The optional type of document to create.

Returns:

  • (Document)

    An existing document or newly created one.



97
98
99
# File 'lib/mongoid/relations/many.rb', line 97

def find_or_create_by(attrs = {}, type = nil, &block)
  find_or(:create, attrs, type, &block)
end

- (Document) find_or_initialize_by(attributes = {}, type = nil) - (Document) find_or_initialize_by(attributes = {}, type = nil)

Find the first Document given the conditions, or instantiates a new document with the conditions that were supplied

Examples:

Find or initialize.

person.posts.find_or_initialize_by(:title => "Test")

Overloads:

  • - (Document) find_or_initialize_by(attributes = {}, type = nil)

    Parameters:

    • attributes (Hash) (defaults to: {})

      The attributes to search or initialize with.

    • type (Class) (defaults to: nil)

      The optional subclass to build.

  • - (Document) find_or_initialize_by(attributes = {}, type = nil)

    Parameters:

    • attributes (Hash) (defaults to: {})

      The attributes to search or initialize with.

    • type (Class) (defaults to: nil)

      The optional subclass to build.

Returns:

  • (Document)

    An existing document or newly instantiated one.



116
117
118
# File 'lib/mongoid/relations/many.rb', line 116

def find_or_initialize_by(attrs = {}, type = nil, &block)
  find_or(:build, attrs, type, &block)
end

- (false) nil?

This proxy can never be nil.

Examples:

Is the proxy nil?

relation.nil?

Returns:

  • (false)

    Always false.

Since:

  • 2.0.0



128
129
130
# File 'lib/mongoid/relations/many.rb', line 128

def nil?
  false
end

- (true, false) respond_to?(name, include_private = false)

Since method_missing is overridden we should override this as well.

Examples:

Does the proxy respond to the method?

relation.respond_to?(:name)

Parameters:

  • name (Symbol)

    The method name.

Returns:

  • (true, false)

    If the proxy responds to the method.

Since:

  • 2.0.0



142
143
144
145
# File 'lib/mongoid/relations/many.rb', line 142

def respond_to?(name, include_private = false)
  [].respond_to?(name, include_private) ||
    klass.respond_to?(name, include_private) || super
end

- (Criteria) scoped

This is public access to the relation's criteria.

Examples:

Get the scoped relation.

relation.scoped

Returns:

Since:

  • 2.1.0



155
156
157
# File 'lib/mongoid/relations/many.rb', line 155

def scoped
  criteria
end

- (Hash) serializable_hash(options = {})

Gets the document as a serializable hash, used by ActiveModel's JSON and XML serializers. This override is just to be able to pass the :include and :except options to get associations in the hash.

Examples:

Get the serializable hash.

relation.serializable_hash

Parameters:

  • options (Hash) (defaults to: {})

    The options to pass.

Options Hash (options):

  • :include (Symbol)

    What relations to include

  • :only (Symbol)

    Limit the fields to only these.

  • :except (Symbol)

    Dont include these fields.

Returns:

  • (Hash)

    The documents, ready to be serialized.

Since:

  • 2.0.0.rc.6



175
176
177
# File 'lib/mongoid/relations/many.rb', line 175

def serializable_hash(options = {})
  target.map { |document| document.serializable_hash(options) }
end

- (Criteria) unscoped

Get a criteria for the embedded documents without the default scoping applied.

Examples:

Get the unscoped criteria.

person.addresses.unscoped

Returns:

Since:

  • 2.4.0



188
189
190
# File 'lib/mongoid/relations/many.rb', line 188

def unscoped
  criteria.unscoped
end