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.

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#__build__(name, object, metadata) ⇒ Proxy

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, Moped::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

#create_relation(object, metadata) ⇒ Proxy

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

#relation_exists?(name) ⇒ true, false

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

#reset_relation_criteria(name) ⇒ Object

Resets the criteria inside the relation proxy. Used by many to many relations to keep the underlying ids array in sync.

Examples:

Reset the relation criteria.

person.reset_relation_criteria(:preferences)

Parameters:

  • name (Symbol)

    The name of the relation.

Since:

  • 3.0.14



70
71
72
73
74
# File 'lib/mongoid/relations/accessors.rb', line 70

def reset_relation_criteria(name)
  if instance_variable_defined?("@_#{name}")
    send(name).reset_unloaded
  end
end

#set_relation(name, relation) ⇒ Proxy

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



88
89
90
# File 'lib/mongoid/relations/accessors.rb', line 88

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