Module: Mongoid::Relations::Accessors

Extended by:
ActiveSupport::Concern
Included in:
Mongoid::Relations
Defined in:
lib/mongoid/relations/accessors.rb

Overview

This module contains all the behaviour related to accessing relations through the getters and setters, and how to delegate to builders to create new ones.

Instance Method Summary (collapse)

Instance Method Details

- (Proxy) __build__(name, object, metadata)

Builds the related document and creates the relation unless the document is nil, then sets the relation on this document.

Examples:

Build the relation.

person.__build__(:addresses, { :id => 1 }, )

Parameters:

  • name (String, Symbol)

    The name of the relation.

  • object (Hash, BSON::ObjectId)

    The id or attributes to use.

  • metadata (Metadata)

    The relation's metadata.

  • building (true, false)

    If we are in a build operation.

Returns:

  • (Proxy)

    The relation.

Since:

  • 2.0.0.rc.1



25
26
27
28
# File 'lib/mongoid/relations/accessors.rb', line 25

def __build__(name, object, )
  relation = create_relation(object, )
  set_relation(name, relation)
end

- (Proxy) create_relation(object, metadata)

Create a relation from an object and metadata.

Examples:

Create the relation.

person.create_relation(document, )

Parameters:

  • Document, (Document, Array<Document ] object The relation target.)

    Array<Document ] object The relation target.

  • metadata (Metadata)

    The relation metadata.

Returns:

  • (Proxy)

    The relation.

Since:

  • 2.0.0.rc.1



41
42
43
44
45
# File 'lib/mongoid/relations/accessors.rb', line 41

def create_relation(object, )
  type = @attributes[.inverse_type]
  target = .builder(self, object).build(type)
  target ? .relation.new(self, target, ) : nil
end

- (true, false) relation_exists?(name)

Determines if the relation exists or not.

Examples:

Does the relation exist?

person.relation_exists?(:people)

Parameters:

  • name (String)

    The name of the relation to check.

Returns:

  • (true, false)

    True if set and not nil, false if not.

Since:

  • 2.0.0.rc.1



57
58
59
# File 'lib/mongoid/relations/accessors.rb', line 57

def relation_exists?(name)
  ivar(name)
end

- (Proxy) set_relation(name, relation)

Set the supplied relation to an instance variable on the class with the provided name. Used as a helper just for code cleanliness.

Examples:

Set the proxy on the document.

person.set(:addresses, addresses)

Parameters:

  • name (String, Symbol)

    The name of the relation.

  • relation (Proxy)

    The relation to set.

Returns:

  • (Proxy)

    The relation.

Since:

  • 2.0.0.rc.1



73
74
75
# File 'lib/mongoid/relations/accessors.rb', line 73

def set_relation(name, relation)
  instance_variable_set("@#{name}", relation)
end