123456789_123456789_123456789_123456789_123456789_

Module: Mongoid::Fields::ClassMethods

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Extended In:
Defined in: lib/mongoid/fields.rb,
lib/mongoid/fields.rb

Instance Attribute Summary

Instance Method Summary

Instance Attribute Details

#using_object_ids?true | false (readonly)

Convenience method for determining if we are using BSON::ObjectIds as our id.

Examples:

Does this class use object ids?

person.using_object_ids?

Returns:

  • (true | false)

    If the class uses BSON::ObjectIds for the id.

[ GitHub ]

  
# File 'lib/mongoid/fields.rb', line 508

def using_object_ids?
  fields["_id"].object_id_field?
end

Instance Method Details

#attribute_namesArray<String>

Returns an array of names for the attributes available on this object.

Provides the field names in an ORM-agnostic way. ::Rails v3.1+ uses this method to automatically wrap params in JSON requests.

Examples:

Get the field names

Model.attribute_names

Returns:

[ GitHub ]

  
# File 'lib/mongoid/fields.rb', line 448

def attribute_names
  fields.keys
end

#cleanse_localized_field_names(name) ⇒ Field

Removes the _translations from the given field name. This is done only when there doesn’t already exist a field name or relation with the same name (i.e. with the _translations suffix). This check for an existing field is done recursively

Parameters:

  • name (String | Symbol)

    The name of the field to cleanse.

Returns:

  • (Field)

    The field name without _translations

[ GitHub ]

  
# File 'lib/mongoid/fields.rb', line 95

def cleanse_localized_field_names(name)
  name = database_field_name(name.to_s)

  klass = self
  [].tap do |res|
    ar = name.split('.')
    ar.each_with_index do |fn, i|
      key = fn
      unless klass.fields.key?(fn) || klass.relations.key?(fn)
        if tr = fn.match(/(.*)_translations\z/)&.captures&.first
          key = tr
        else
          key = fn
        end

      end
      res.push(key)

      if klass.fields.key?(fn)
        res.push(ar.drop(i+1).join('.')) unless i == ar.length - 1
        break
      elsif klass.relations.key?(fn)
        klass = klass.relations[key].klass
      end
    end
  end.join('.')
end

#database_field_name(name) ⇒ String

Get the name of the provided field as it is stored in the database. Used in determining if the field is aliased or not.

Parameters:

Returns:

  • (String)

    The name of the field as it’s stored in the db.

[ GitHub ]

  
# File 'lib/mongoid/fields.rb', line 458

def database_field_name(name)
  Fields.database_field_name(name, relations, aliased_fields, aliased_associations)
end

#extract_id_field(attributes) ⇒ Object

This method is for internal use only.

Extracts the id field from the specified attributes hash based on aliases defined in this class.

Parameters:

  • attributes (Hash)

    The attributes to inspect.

Returns:

  • (Object)

    The id value.

[ GitHub ]

  
# File 'lib/mongoid/fields.rb', line 78

def extract_id_field(attributes)
  id_fields.each do |k|
    if v = attributes[k]
      return v
    end
  end
  nil
end

#field(name, options = {}) ⇒ Field

Defines all the fields that are accessible on the ::Mongoid::Document For each field that is defined, a getter and setter will be added as an instance method to the ::Mongoid::Document.

Examples:

Define a field.

field :score, type: Integer, default: 0

Parameters:

  • name (Symbol)

    The name of the field.

  • options (Hash) (defaults to: {})

    The options to pass to the field.

Options Hash (options):

  • :type (Class | Symbol | String)

    The type of the field.

  • :label (String)

    The label for the field.

  • :default (Object | Proc)

    The field’s default.

Returns:

  • (Field)

    The generated field

[ GitHub ]

  
# File 'lib/mongoid/fields.rb', line 477

def field(name, options = {})
  named = name.to_s
  Validators::Macro.validate(self, name, options)
  added = add_field(named, options)
  descendants.each do |subclass|
    subclass.add_field(named, options)
  end
  added
end

#id_fieldsArray<Symbol | String>

This method is for internal use only.

Returns the list of id fields for this model class, as both strings and symbols.

Returns:

[ GitHub ]

  
# File 'lib/mongoid/fields.rb', line 59

def id_fields
  IDS.dup.tap do |id_fields|
    aliased_fields.each do |k, v|
      if v == '_id'
        id_fields << k.to_sym
        id_fields << k
      end
    end
  end
end

#replace_field(name, type) ⇒ Serializable

Replace a field with a new type.

Examples:

Replace the field.

Model.replace_field("_id", String)

Parameters:

  • name (String)

    The name of the field.

  • type (Class)

    The new type of field.

Returns:

[ GitHub ]

  
# File 'lib/mongoid/fields.rb', line 496

def replace_field(name, type)
  remove_defaults(name)
  add_field(name, fields[name].options.merge(type: type))
end

#traverse_association_tree(key) {|The, The, Whether| ... } ⇒ Field

This method is for internal use only.

Traverse down the association tree and search for the field for the given key.

Parameters:

  • key (String)

    The key used to search the association tree.

  • &block

    The block.

Yield Parameters:

  • The (Symbol)

    current method.

  • The (Symbol | String)

    field or the relation.

  • Whether (true | false)

    the second yield parameter is a field or not.

Returns:

  • (Field)

    The field found for the given key at the end of the search. This will return nil if the last thing found is an association or no field was found for the given key.

[ GitHub ]

  
# File 'lib/mongoid/fields.rb', line 527

def traverse_association_tree(key, &block)
  Fields.traverse_association_tree(key, fields, relations, aliased_associations, &block)
end