Módulo: Mongoid::Fields

Ampliado por:
ActiveSupport::Concern
Incluido en:
Compuesto
Definido en:
lib/mongoid/fields.rb,
lib/mongoid/fields/standard.rb,
lib/mongoid/fields/encrypted.rb,
lib/mongoid/fields/localized.rb,
lib/mongoid/fields/foreign_key.rb,
lib/mongoid/fields/validators/macro.rb

Overview

Este módulo define el comportamiento de los campos.

Definido bajo Namespace

Modules: ClassMethods, Validators Clases: cifrado, ForeignKey, Localized, Standard

Colapso delresumen constante

StringifiedSymbol =
Mongoid::SímboloSerializado
booleano =
Mongoid::Booleano
TYPE_MAPPINGS =

Para los campos definidos con símbolos, utilice la clase correcta.

{
  formación: Arreglo,
  big_decimal: Gran decimal,
  binario: BSON::Binario,
  booleano: Mongoid::Booleano,
  fecha: fecha,
  fecha_hora: Fecha y hora,
  float: Float,
  encriptada: Picadillo,
  entero: entero,
  object_id: BSON::ObjectId,
  rango: Rango,
  regexp: Regexp,
  colocar: Configura,
  string: String,
  símbolo.stringify: SímboloSerializado,
  símbolo: Símbolo,
  hora: Tiempo
}.con_acceso_indiferente
IDS =

Esta constante forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Constante para todos los nombres del campo _id en un documento.

Esto no incluye los alias del campo _id.

[ :_identificación, '_id', ].freeze
INVALID_BSON_CLASSES =

Esta constante forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Clases BSON no admitidas como tipos de campo

[ BSON::Decimal128, BSON::Int32, BSON::Int64 ].freeze
TRANSLATIONS_SFX =

Esta constante forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

El sufijo para los campos traducidos generados.

'_translations'

Resumen del método de clase colapsar

Resumen del método de instancia colapsar

Detalles del método de clase

.nombre_campo_base_de_datos(nombre, relaciones, campos_aliased, asociaciones_aliased) ⇒ String

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Obtiene el nombre del campo proporcionado tal como se almacena en la base de datos. Se utiliza para determinar si el campo es un alias o no. Busca recursivamente alias para documentos y campos incrustados, delimitados con el carácter punto “.”.

Tenga en cuenta que este método devuelve el nombre de las asociaciones tal como se almacenan en la base de datos, mientras que el hash "relations" utiliza sus alias en el código. Para comprobar la pertenencia en el hash "relations", primero deberá buscar la cadena devuelta por este método en el hash "aliased_associations".

Este método no expandirá el alias de una asociación "belongs_to" que no sea el último elemento. Por ejemplo, si tuviéramos una escuela que tiene muchos estudiantes, y el nombre del campo que se pasó fue (desde la perspectiva del estudiante):

school._id

El alias de una asociación belong_to es el campo _id de dicha asociación. Por lo tanto, expandir esta asociación generaría:

school_id._id

Este no es el nombre correcto del campo, porque la intención aquí no era obtener una propiedad del campo _id. La intención era obtener una propiedad del documento referenciado. Por lo tanto, si una parte del nombre pasado es una belongs_to asociación que no es la última parte del nombre, no ampliaremos su alias y se devolverá:

school._id

Si la asociación belongs_to es la última parte del nombre, devolveremos el campo _id.

Parámetros:

  • Nombre (String | Símbolo)

    El nombre a obtener.

  • relaciones (encriptada)

    Las asociaciones.

  • campos_alias (encriptada)

    Los campos con alias.

  • asociaciones_aliasadas (encriptada)

    Las Asociaciones con Alias.

Devuelve:

  • (string)

    El nombre del campo tal como se almacena en la base de datos.



415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
# Archivo 'lib/mongoid/fields.rb', línea 415

def database_field_name(Nombre, relaciones, campos_alias, asociaciones_aliasadas)
  return "" a menos que Nombre.¿presente?

  llave = Nombre.to_s
  segmento, restante = llave.división('.', 2)

  # No obtengas el alias del campo cuando una asociación belongs_to
  # no es el último elemento. Por lo tanto, obtenga el alias cuando uno de los
  # lo siguiente es cierto:
  # 1. Este es el último elemento, es decir, no queda nada.
  # 2. No se trata de una asociación.
  # 3. No es una asociación de pertenencia.
  si !restante || !relaciones.key?(segmento) || !relaciones[segmento].is_a?(Asociación::Referenciado::BelongsTo)
    segmento = campos_alias[segmento]&.dup || segmento
  end

  return segmento a menos que restante

  relación = relaciones[asociaciones_aliasadas[segmento] || segmento]
  si relación
    k = relación.klass
    "#{segmento}.#{database_field_name(restantes, k.relaciones, k.campos_alegados, k.asociaciones_alegadas)}"
  else
    "#{segmento}.#{restante}"
  end
end

.opción(nombre_opción, &bloque) ⇒ Objeto

Almacena el bloque proporcionado que se ejecutará cuando el nombre de la opción especificada esté definido en un campo.

No se hacen suposiciones sobre qué funcionalidad podría realizar el handler, por lo que siempre será llamado si se proporciona la clave ‘option_name’ en la definición del campo, incluso si es false o nil.

Ejemplos:

Mongoid::Fields.option :required do |model, field, value|
  model.validates_presence_of field if value
end

Parámetros:

  • option_name (Símbolo)

    el nombre de opción para comparar

  • &bloque

    el gestor a ejecutar cuando se proporcione la opción.



298
299
300
# Archivo 'lib/mongoid/fields.rb', línea 298

def opción(option_name, Ybloque)
  opciones[option_name] = bloque
end

.optionsHash

Devuelve un mapa de nombres de opciones personalizados y sus manejadores.

Ejemplos:

Mongoid::Fields.options
# => { :required => #<Proc:0x00000100976b38> }

Devuelve:

  • (encriptada)

    el mapa de opciones



309
310
311
# Archivo 'lib/mongoid/fields.rb', línea 309

def opciones
  @options ||= {}
end

.traverse_association_tree(key, fields, associations, aliased_associations) {|El, El, Si| ... } ⇒ campo

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Recorra el árbol de asociaciones y busque el campo para la clave dada. Para hacer esto, divide la clave por '.' y para cada parte (meth) de la clave:

  • Si meth es un campo, devuelve meth, field y is_field como verdaderos.

  • Si meth es una asociación, actualiza klass al klass de la asociación y transmite meth, klass e is_field como falso.

La siguiente iteración utilizará los campos y asociaciones de klass para continuar recorriendo el árbol.

Parámetros:

  • llave (string)

    La clave utilizada para la búsqueda del árbol de asociaciones.

  • campos (encriptada)

    Los campos con los que comenzar la búsqueda.

  • asociaciones (encriptada)

    Las asociaciones con las que se debe iniciar la búsqueda.

  • asociaciones_aliasadas (encriptada)

    Las asociaciones aliadas para iniciar la búsqueda.

  • &bloque

    El bloque.

Parámetros de rendimiento:

  • La (Símbolo)

    método actual.

  • La (Symbol | string)

    campo o la relación.

  • Si (true | false)

    el segundo parámetro de rendimiento es un campo o no.

Devuelve:

  • (campo)

    El campo encontrado para la clave dada al final de la búsqueda. Esto devolverá nil si lo último que se encontró es una asociación o no se encontró ningún campo para la clave dada.



340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# Archivo 'lib/mongoid/fields.rb', línea 340

def árbol de asociación transversal(llave, campos, asociaciones, asociaciones_aliasadas)
  klass = nulo
  Campo = nulo
  llave.división('.').cada_con_índice hacer |met, i|
    fs = i == 0 ? campos : klass&.campos
    rs = i == 0 ? asociaciones : klass&.relaciones
    como = i == 0 ? asociaciones_aliasadas : klass&.asociaciones_aliasadas

    # Las asociaciones pueden tener posiblemente dos "claves", su nombre y su alias.
    # El nombre del campo es lo que se utiliza para almacenarlo en las relaciones de la clase.
    # y hashes de campo, y el alias es lo que se usa para almacenar ese campo
    # en la base de datos. La clave ingresada a esta función es la clave con alias
    # tecla. Podemos convertirlos de nuevo a sus nombres mirando en el
    # hash de aliased_associations.
    aliased = met
    si como && un(a) = como.obtener(met, nulo)
      aliased = un(a).to_s
    end

    Campo = nulo
    klass = nulo
    si fs && f = fs[aliased]
      Campo = f
      rendimiento(met, f, true) si ¿block_given?
    elsif rs && rel = rs[aliased]
      klass = rel.klass
      rendimiento(met, rel, false) si ¿block_given?
    else
      rendimiento(met, nulo, false) si ¿block_given?
    end
  end
  Campo
end

Detalles del método de instancia

#apply_default(nombre) ⇒ Objeto

Aplica un valor por defecto único para el nombre dado.

Ejemplos:

Aplica uno solo por defecto.

model.apply_default("name")

Parámetros:

  • Nombre (string)

    El nombre del campo.



183
184
185
186
187
188
189
190
191
192
193
# Archivo 'lib/mongoid/fields.rb', línea 183

def aplicar predeterminado(Nombre)
  a menos que atributos.key?(Nombre)
    si Campo = campos[Nombre]
      predeterminado = Campo.eval_default(sí mismo)
      a menos que predeterminado.nil? || Campo.lazy?
        ¡El atributo cambiará!(Nombre)
        atributos[Nombre] = predeterminado
      end
    end
  end
end

#apply_defaultsObjeto

Aplicar todos los valores predeterminados a la vez.

Ejemplos:

Aplicar todos los valores predeterminados.

model.apply_defaults


199
200
201
202
203
# Archivo 'lib/mongoid/fields.rb', línea 199

def aplicar_predeterminados
  pending_callbacks.borrar(:aplicar_valores_predeterminados)
  aplicar_predeterminados_preprocesados
  aplicar_valores_predeterminados_post_procesados
end

#aplicar_valores_predeterminados_post_procesadosMatriz<String>

Aplicar todos los valores por defecto en el documento que sean procesos.

Ejemplos:

Aplicar todos los valores predeterminados del procedimiento.

model.apply_post_processed_defaults

Devuelve:

  • (arreglo<String>)

    Los nombres de los valores por defecto del procedimiento.



170
171
172
173
174
175
# Archivo 'lib/mongoid/fields.rb', línea 170

def aplicar_valores_predeterminados_post_procesados
  pending_callbacks.borrar(:apply_post_processed_defaults)
  valores predeterminados posprocesados.cada hacer |Nombre|
    aplicar predeterminado(Nombre)
  end
end

#apply_pre_processed_defaultsArray<String>

Aplica todos los valores por defecto al documento que no sean procedimientos.

Ejemplos:

Aplica todos los valores por defecto que no sean proc.

model.apply_pre_processed_defaults

Devuelve:

  • (arreglo<String>)

    Los nombres de los valores por defecto no-proc



158
159
160
161
162
# Archivo 'lib/mongoid/fields.rb', línea 158

def aplicar_predeterminados_preprocesados
  pre_processed_defaults.cada hacer |Nombre|
    aplicar predeterminado(Nombre)
  end
end

#attribute_namesarreglo<String>

Devuelve un arreglo de nombres de los atributos disponibles en este objeto.

Brinda los nombres de los campos de manera independiente del ORM. Rails v3.1+ usa este método para envolver automáticamente parámetros en solicitudes JSON.

Ejemplos:

Obtén los nombres de los campos

document.attribute_names

Devuelve:

  • (arreglo<String>)

    Los nombres de los campos



214
215
216
# Archivo 'lib/mongoid/fields.rb', línea 214

def nombres de atributos
  sí mismo.clase.nombres de atributos
end

#database_field_name(name) ⇒ String

Obtiene el nombre del campo proporcionado tal como está almacenado en la base de datos. Se utiliza para determinar si el campo tiene alias o no.

Ejemplos:

Obtener el nombre del campo de la base de datos.

model.database_field_name(:authorization)

Parámetros:

  • Nombre (String | Símbolo)

    El nombre a obtener.

Devuelve:

  • (string)

    El nombre del campo tal como está almacenado en la base de datos.



227
228
229
# Archivo 'lib/mongoid/fields.rb', línea 227

def database_field_name(Nombre)
  sí mismo.clase.database_field_name(Nombre)
end

#dot_dollar_field?(nombre) ⇒ true | false

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

¿Este campo comienza con un signo de dólar ($) o contiene un punto (.)?

Parámetros:

  • Nombre (string)

    El nombre del campo.

Devuelve:

  • (true | false)

    Si este campo está con puntos o con dólar.



263
264
265
266
# Archivo 'lib/mongoid/fields.rb', línea 263

def dot_dollar_field?(Nombre)
  n = campos_alias[Nombre] || Nombre
  campos.key?(n) && (n.incluir?('.') || n.start_with?('$'))
end

#lazy_settable?(campo, valor) ⇒ true | false

¿El campo proporcionado es una evaluación perezosa?

Ejemplos:

Si el campo es settable perezoso.

doc.lazy_settable?(field, nil)

Parámetros:

  • Campo (campo)

    El campo.

  • Valor (objeto)

    El valor actual.

Devuelve:

  • (true | false)

    Si configuramos el campo de forma perezosa.



240
241
242
# Archivo 'lib/mongoid/fields.rb', línea 240

def lazy_settable?(Campo, Valor)
  !frozen? && Valor.nil? && Campo.lazy?
end

#using_object_ids?true | false

Nota:

Refactorizado a partir del uso de delegado para mejorar el rendimiento de carga de clases.

¿El documento utiliza identificadores de objeto?

Ejemplos:

¿El documento utiliza identificadores de objeto?

model.using_object_ids?

Devuelve:

  • (true | false)

    Uso de identificadores de objetos.



252
253
254
# Archivo 'lib/mongoid/fields.rb', línea 252

def ¿usando_object_ids?
  sí mismo.clase.¿usando_object_ids?
end

#validate_nombre_campo_escribible!(nombre) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Validar si el campo comienza con un signo de dólar ($) o contiene un punto/periodo (.).

Parámetros:

  • Nombre (string)

    El nombre del campo.

Aumenta:

  • (AsignaciónInválidaDotDollar)

    Si contiene puntos o empieza por un signo de dólar.



276
277
278
279
280
# Archivo 'lib/mongoid/fields.rb', línea 276

def validate_writable_field_name!(Nombre)
  si dot_dollar_field?(Nombre)
    propagar Errors::InvalidDotDollarAssignment.Nuevo(sí mismo.clase, Nombre)
  end
end