module Mongoid::Association::Macros::ClassMethods

Public Instance Methods

belongs_to(name, options = {}, &block) click to toggle source

Adds a referenced association from the child Document to a Document in another database or collection.

@example Define the association.

class Game
  include Mongoid::Document
  belongs_to :person
end

class Person
  include Mongoid::Document
  has_one :game
end

@param [ Symbol ] name The name of the association. @param [ Hash ] options The association options. @param [ Proc ] block Optional block for defining extensions.

# File lib/mongoid/association/macros.rb, line 123
def belongs_to(name, options = {}, &block)
  define_association!(__method__, name, options, &block)
end
embedded_in(name, options = {}, &block) click to toggle source

Adds the association back to the parent document. This macro is necessary to set the references from the child back to the parent document. If a child does not define this association calling persistence methods on the child object will cause a save to fail.

@example Define the association.

class Person
  include Mongoid::Document
  embeds_many :addresses
end

class Address
  include Mongoid::Document
  embedded_in :person
end

@param [ Symbol ] name The name of the association. @param [ Hash ] options The association options. @param [ Proc ] block Optional block for defining extensions.

# File lib/mongoid/association/macros.rb, line 55
def embedded_in(name, options = {}, &block)
  define_association!(__method__, name, options, &block)
end
embeds_many(name, options = {}, &block) click to toggle source

Adds the association from a parent document to its children. The name of the association needs to be a pluralized form of the child class name.

@example Define the association.

class Person
  include Mongoid::Document
  embeds_many :addresses
end

class Address
  include Mongoid::Document
  embedded_in :person
end

@param [ Symbol ] name The name of the association. @param [ Hash ] options The association options. @param [ Proc ] block Optional block for defining extensions.

# File lib/mongoid/association/macros.rb, line 78
def embeds_many(name, options = {}, &block)
  define_association!(__method__, name, options, &block)
end
embeds_one(name, options = {}, &block) click to toggle source

Adds the association from a parent document to its child. The name of the association needs to be a singular form of the child class name.

@example Define the association.

class Person
  include Mongoid::Document
  embeds_one :name
end

class Name
  include Mongoid::Document
  embedded_in :person
end

@param [ Symbol ] name The name of the association. @param [ Hash ] options The association options. @param [ Proc ] block Optional block for defining extensions.

# File lib/mongoid/association/macros.rb, line 101
def embeds_one(name, options = {}, &block)
  define_association!(__method__, name, options, &block)
end
has_and_belongs_to_many(name, options = {}, &block) click to toggle source

Adds a referenced many-to-many association between many of this Document and many of another Document.

@example Define the association.

class Person
  include Mongoid::Document
  has_and_belongs_to_many :preferences
end

class Preference
  include Mongoid::Document
  has_and_belongs_to_many :people
end

@param [ Symbol ] name The name of the association. @param [ Hash ] options The association options. @param [ Proc ] block Optional block for defining extensions.

@since 2.0.0.rc.1

# File lib/mongoid/association/macros.rb, line 169
def has_and_belongs_to_many(name, options = {}, &block)
  define_association!(__method__, name, options, &block)
end
has_many(name, options = {}, &block) click to toggle source

Adds a referenced association from a parent Document to many Documents in another database or collection.

@example Define the association.

class Person
  include Mongoid::Document
  has_many :posts
end

class Game
  include Mongoid::Document
  belongs_to :person
end

@param [ Symbol ] name The name of the association. @param [ Hash ] options The association options. @param [ Proc ] block Optional block for defining extensions.

# File lib/mongoid/association/macros.rb, line 145
def has_many(name, options = {}, &block)
  define_association!(__method__, name, options, &block)
end
has_one(name, options = {}, &block) click to toggle source

Adds a referenced association from the child Document to a Document in another database or collection.

@example Define the association.

class Game
  include Mongoid::Document
  belongs_to :person
end

class Person
  include Mongoid::Document
  has_one :game
end

@param [ Symbol ] name The name of the association. @param [ Hash ] options The association options. @param [ Proc ] block Optional block for defining extensions.

# File lib/mongoid/association/macros.rb, line 191
def has_one(name, options = {}, &block)
  define_association!(__method__, name, options, &block)
end

Private Instance Methods

define_association!(macro_name, name, options = {}, &block) click to toggle source
# File lib/mongoid/association/macros.rb, line 197
def define_association!(macro_name, name, options = {}, &block)
  Association::MACRO_MAPPING[macro_name].new(self, name, options, &block).tap do |assoc|
    assoc.setup!
    self.relations = self.relations.merge(name => assoc)
  end
end