Module: Mongoid::Hierarchy::ClassMethods

Defined in:
lib/mongoid/hierarchy.rb

Instance Method Summary collapse

Instance Method Details

#hereditary?true, false

Determines if the document is a subclass of another document.

Examples:

Check if the document is a subclass.

Square.hereditary?

Returns:

  • (true, false)

    True if hereditary, false if not.



154
155
156
# File 'lib/mongoid/hierarchy.rb', line 154

def hereditary?
  Mongoid::Document > superclass
end

#inherited(subclass) ⇒ Object

When inheriting, we want to copy the fields from the parent class and set the on the child to start, mimicking the behaviour of the old class_inheritable_accessor that was deprecated in Rails edge.

Examples:

Inherit from this class.

Person.inherited(Doctor)

Parameters:

  • subclass (Class)

    The inheriting class.

Since:

  • 2.0.0.rc.6



168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# File 'lib/mongoid/hierarchy.rb', line 168

def inherited(subclass)
  super
  @_type = nil
  subclass.aliased_fields = aliased_fields.dup
  subclass.fields = fields.dup
  subclass.pre_processed_defaults = pre_processed_defaults.dup
  subclass.post_processed_defaults = post_processed_defaults.dup
  subclass.scopes = scopes.dup

  # We only need the _type field if inheritance is in play, but need to
  # add to the root class as well for backwards compatibility.
  unless fields.has_key?("_type")
    field(:_type, default: self.name, type: String)
  end
  subclass.field(:_type, default: subclass.name, type: String)
end