Module: Mongoid::Traversable::ClassMethods
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Defined in: | lib/mongoid/traversable.rb |
Overview
Class-level methods for the ::Mongoid::Traversable
behavior.
Instance Attribute Summary
-
#hereditary? ⇒ true | false
readonly
Determines if the document is a subclass of another document.
Instance Method Summary
-
#inherited(subclass)
When inheriting, we want to copy the fields from the parent class and set the on the child to start, mimicking the behavior of the old class_inheritable_accessor that was deprecated in
::Rails
edge.
Instance Attribute Details
#hereditary? ⇒ true
| false
(readonly)
Determines if the document is a subclass of another document.
Instance Method Details
#inherited(subclass)
When inheriting, we want to copy the fields from the parent class and set the on the child to start, mimicking the behavior of the old class_inheritable_accessor that was deprecated in ::Rails
edge.
# File 'lib/mongoid/traversable.rb', line 34
def inherited(subclass) super # Register the new subclass with the resolver subsystem Mongoid::ModelResolver.register(subclass) @_type = nil subclass.aliased_fields = aliased_fields.dup subclass.localized_fields = localized_fields.dup subclass.fields = fields.dup subclass.pre_processed_defaults = pre_processed_defaults.dup subclass.post_processed_defaults = post_processed_defaults.dup subclass._declared_scopes = Hash.new { |_hash, key| _declared_scopes[key] } subclass.discriminator_value = subclass.name # We need to do this here because the discriminator_value method is # overridden in the subclass above. subclass.include DiscriminatorRetrieval # We only need the _type field if inheritance is in play, but need to # add to the root class as well for backwards compatibility. return if fields.key?(discriminator_key) default_proc = -> { self.class.discriminator_value } field(discriminator_key, default: default_proc, type: String) end