123456789_123456789_123456789_123456789_123456789_

Module: Mongoid::Association::Embedded::Cyclic::ClassMethods

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Extended In:
Defined in: lib/mongoid/association/embedded/cyclic.rb

Instance Method Summary

Instance Method Details

#cyclic_child_name(many = true) ⇒ String (private)

Determines the child name given the class.

Examples:

Determine the child name.

Role.cyclic_child_name

Parameters:

  • many (true | false) (defaults to: true)

    Is the a many association?

Returns:

  • (String)

    “child_” plus the class name underscored in singular or plural form.

[ GitHub ]

  
# File 'lib/mongoid/association/embedded/cyclic.rb', line 96

def cyclic_child_name(many = true)
  ("child_#{self.name.demodulize.underscore.send(many ? :pluralize : :singularize)}").to_sym
end

#cyclic_parent_nameString (private)

Determines the parent name given the class.

Examples:

Determine the parent name.

Role.cyclic_parent_name

Returns:

  • (String)

    “parent_” plus the class name underscored.

[ GitHub ]

  
# File 'lib/mongoid/association/embedded/cyclic.rb', line 83

def cyclic_parent_name
  ("parent_#{self.name.demodulize.underscore.singularize}").to_sym
end

#recursively_embeds_many(options = {})

Create a cyclic embedded association that creates a tree hierarchy for the document and many embedded child documents.

This provides the default nomenclature for accessing a parent document or its children.

Examples:

::Set up a recursive embeds many.

class Role
  include Mongoid::Document
  recursively_embeds_many
end

The previous example is a shortcut for this.

class Role
  include Mongoid::Document
  embeds_many :child_roles, :class_name => "Role", :cyclic => true
  embedded_in :parent_role, :class_name => "Role", :cyclic => true
end
[ GitHub ]

  
# File 'lib/mongoid/association/embedded/cyclic.rb', line 39

def recursively_embeds_many(options = {})
  embeds_many(
      cyclic_child_name,
      options.merge(class_name: self.name, cyclic: true)
  )
  embedded_in cyclic_parent_name, class_name: self.name, cyclic: true
end

#recursively_embeds_one(options = {})

Create a cyclic embedded association that creates a single self referencing relationship for a parent and a single child.

This provides the default nomenclature for accessing a parent document or its children.

Examples:

::Set up a recursive embeds one.

class Role
  include Mongoid::Document
  recursively_embeds_one
end

The previous example is a shortcut for this.

class Role
  include Mongoid::Document
  embeds_one :child_role, :class_name => "Role", :cyclic => true
  embedded_in :parent_role, :class_name => "Role", :cyclic => true
end
[ GitHub ]

  
# File 'lib/mongoid/association/embedded/cyclic.rb', line 67

def recursively_embeds_one(options = {})
  embeds_one(
      cyclic_child_name(false),
      options.merge(class_name: self.name, cyclic: true)
  )
  embedded_in cyclic_parent_name, class_name: self.name, cyclic: true
end