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

Resumen de constantes colapsar

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

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

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

Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada en el futuro.

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

Esto no incluye los alias del campo _id.

[ ::_id, '_id' ].freeze
INVALID_BSON_CLASSES =

Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada en el futuro.

Clases BSON no admitidas como tipos de campo

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

Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada 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 es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Get el nombre del campo proporcionado tal como está almacenado en la base de datos. Se utiliza para determinar si el campo tiene un alias o no. Encuentra recursivamente alias para documentos incrustados y campos, delimitados con un punto "." personaje.

Ten 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 de relaciones, primero tendrías que buscar la string devuelta por este método en el hash de 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 tuviera_many Estudiantes, y el nombre del campo pasado fuera (desde la perspectiva del Estudiante):

school._id

El alias para una asociación belongs_to es el campo _id de esa asociación. Por lo tanto, al ampliar esta asociación se obtendría:

school_id._id

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

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_aliased (encriptada)

    Las Asociaciones con Alias.

Devuelve:

  • (string)

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



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

def database_field_name(Nombre, relaciones, campos_alias, asociaciones_aliased)
  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, obtén 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_aliased[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 para ser ejecutado cuando el nombre de la opción especificada se defina en un campo.

No se hacen suposiciones sobre qué funcionalidad puede realizar el gestor, por lo que siempre se le llamará si se proporciona la clave option_name en la definición del campo, incluso si es falsa o nula.

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.



294
295
296
# Archivo 'lib/mongoid/fields.rb', línea 294

def Opción(option_name, &bloque)
  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



305
306
307
# Archivo 'lib/mongoid/fields.rb', línea 305

def opciones
  @options ||= {}
end

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

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

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

  • Si meth es un campo, generar meth, campo y is_field como verdadero.
  • Si el "meth" es una asociación, actualiza el "klass" al de la asociación, y produce el "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_aliased (encriptada)

    Las asociaciones con alias por las que comenzar 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.



336
337
338
339
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
# Archivo 'lib/mongoid/fields.rb', línea 336

def recorrer_árbol_de_asociaciones(llave, Campos, asociaciones, asociaciones_aliased)
  klass = nulo
  Campo = nulo
  llave.división('.').each_with_index hacer |meta, i|
    fs = (i == 0) ? Campos : klass&.Campos
    rs = (i == 0) ? asociaciones : klass&.relaciones
    como = (i == 0) ? asociaciones_aliased : klass&.asociaciones_aliased

    # 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 en esta función es el alias
    # clave. Podemos convertirlos de nuevo en sus nombres buscando en la
    # hash de aliased_associations.
    aliased = meta
    si como && un(a) = como.obtener(meta, nulo)
      aliased = un(a).to_s
    end

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

Detalles del método de instancia

#apply_default(name) ⇒ Object

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.



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

def aplicar predeterminado(Nombre)
  return si atributos.key?(Nombre)
  return a menos que Campo = Campos[Nombre]

  predeterminado = Campo.eval_default(sí mismo)
  return si predeterminado.nil? || Campo.lazy?

  attribute_will_change!(Nombre)
  atributos[Nombre] = predeterminado
end

#apply_defaultsObjeto

Aplicar todos los valores por defecto a la vez.

Ejemplos:

Aplica todos los valores por defecto.

model.apply_defaults


196
197
198
199
200
# Archivo 'lib/mongoid/fields.rb', línea 196

def aplicar_predeterminados
  pending_callbacks.borrar(Aplicar predeterminados)
  aplicar_predeterminados_preprocesados
  apply_post_processed_defaults
end

#apply_post_processed_defaultsarreglo<String>

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

Ejemplos:

Aplica todas las configuraciones por defecto del procedimiento.

model.apply_post_processed_defaults

Devuelve:

  • (arreglo<String>)

    Los nombres de los valores por defecto del procedimiento.



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

def apply_post_processed_defaults
  pending_callbacks.borrar(:apply_post_processed_defaults)
  post_processed_defaults.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



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

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



211
212
213
# Archivo 'lib/mongoid/fields.rb', línea 211

def attribute_names
  sí mismo.clase.attribute_names
end

#database_field_name(name) ⇒ String

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

Ejemplos:

Obtén 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 se almacena en la base de datos.



224
225
226
# Archivo 'lib/mongoid/fields.rb', línea 224

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

#dot_dollar_field?(nombre) ⇒ true | false

Este método es parte de una API privada. Se debe evitar el uso de este método 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.



260
261
262
263
# Archivo 'lib/mongoid/fields.rb', línea 260

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

¿Es el campo proporcionado una evaluación diferida?

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.



237
238
239
# Archivo 'lib/mongoid/fields.rb', línea 237

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

#using_object_ids?true | false

Nota:

Refactorizado para no usar delegado para 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.



249
250
251
# Archivo 'lib/mongoid/fields.rb', línea 249

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

#validate_nombre_campo_escribible!(nombre) ⇒ Objeto

Este método es parte de una API privada. Se debe evitar el uso de este método 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.



273
274
275
276
277
# Archivo 'lib/mongoid/fields.rb', línea 273

def validate_writable_field_name!(Nombre)
  return a menos que dot_dollar_field?(Nombre)

  propagar Errors::InvalidDotDollarAssignment.Nuevo(sí mismo.clase, Nombre)
end