Módulo: Mongoid::Fields

Ampliado por:
ActiveSupport::Preocupación
Incluido en:
Componible
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 en el espacio de nombres

Modules: Métodos de clase, validadores Clases: Cifrado, Clave externa, Localizado, Estándar

Colapso delresumen constante

Símbolo de cadena =
Mongoid::Símbolo de cadena
Booleano =
Mongoid::Booleano
ASIGNACIONES_DE_TIPOS =

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

{
  formación: Arreglo,
  decimal grande: Gran decimal,
  binario: BSON::Binario,
  booleano: Mongoid::Booleano,
  fecha: fecha,
  fecha_hora: Fecha y hora,
  float: Float,
  picadillo: Picadillo,
  entero: entero,
  object_id: BSON::ObjectId,
  rango: Rango,
  regexp: Regexp,
  colocar: Configura,
  cadena: String,
  símbolo_de_cadena: Símbolo de cadena,
  símbolo: Símbolo,
  tiempo: Tiempo
}.con_acceso_indiferente
Identificación =

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
CLASES BSON NO VÁLIDAS =

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 que no se admiten como tipos de campo

[ BSON::Decimal128, BSON::Int32, BSON::Entero64 ].freeze
TRADUCCIONES_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.

'_traducciones'

Colapso delresumen del método de clase

Colapso del resumen del método de instancia

Detalles del método de clase

.database_field_name(nombre, relaciones, campos con alias, asociaciones con alias) ⇒ Cadena

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 está almacenado en la base de datos. Se utiliza para determinar si el campo tiene alias. Busca recursivamente alias para documentos y campos incrustados, delimitados por un 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 belong_to que no sea el último elemento. Por ejemplo, si tuviéramos una escuela con has_many Students, y el nombre del campo pasado fuera (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 de campo correcto, ya que la intención no era obtener una propiedad del campo _id, sino una propiedad del documento referenciado. Por lo tanto, si una parte del nombre pasado es una asociación belong_to que no es la última parte del nombre, no expandiremos su alias y devolveremos:

school._id

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

Parámetros:

  • Nombre (Cadena | Símbolo)

    El nombre a obtener.

  • relaciones (Hash)

    Las asociaciones.

  • campos con alias (Hash)

    Los campos con alias.

  • asociaciones_aliasadas (Hash)

    Las Asociaciones con Alias.

Devuelve:

  • (Cadena) -

    El nombre del campo tal como está almacenado 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 nombre_del_campo_de_base_de_datos(Nombre, relaciones, campos con alias, asociaciones_aliasadas)
  return "" a no ser que Nombre.¿presente?

  clave = Nombre.a_s
  segmento, restantes = clave.división('.', 2)

  # No obtenga el alias para el campo cuando existe una asociación belong_to
  # no es el último elemento. Por lo tanto, obtenga el alias cuando uno de los
  # Lo siguiente es verdadero:
  # 1. Este es el último elemento, es decir, no queda ninguno.
  # 2. No es una asociación.
  # 3. No es una asociación de pertenencia
  Si !restantes || !relaciones.key?(segmento) || !relaciones[segmento].is_a?(Asociación::Referenciado::Pertenece a)
    segmento = campos con alias[segmento]&.dup || segmento
  end

  return segmento a no ser que restantes

  relación = relaciones[asociaciones_aliasadas[segmento] || segmento]
  Si relación
    k = relación.klass
    "#{segmento }.#{nombre_campo_base_datos(restantes, k.relaciones, k.campos_alias, k.asociaciones_alias)}"
  else
    "#{segmento }.#{restante}"
  end
end

.opción(nombre_de_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 controlador, por lo que siempre se 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 la opción a comparar

  • &bloquear

    el controlador que se 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 personalizadas a sus controladores.

Ejemplos:

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

Devuelve:

  • (Hash)

    el mapa de opciones



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

def opciones
  @opciones ||= {}
end

.traverse_association_tree(clave, campos, asociaciones, asociaciones_alias) {|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 correspondiente a la clave dada. Para ello, divida 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 el meth es una asociación, actualice la clase a la clase de la asociación y devuelva el meth, la clase y el is_field como falsos.

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

Parámetros:

  • clave (Cadena) -

    La clave utilizada para buscar en el árbol de asociación.

  • campos (Hash)

    Los campos para comenzar la búsqueda.

  • asociaciones (Hash)

    Las asociaciones para iniciar la búsqueda.

  • asociaciones_aliasadas (Hash)

    Las asociaciones aliadas para iniciar la búsqueda.

  • &bloquear

    El bloque.

Parámetros de rendimiento:

  • El ( Símbolo) -

    método actual.

  • El (Símbolo| Cadena)

    campo o la relación.

  • Si (verdadero | falso)

    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. Devolverá nulo si el último resultado encontrado es una asociación o si 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(clave, campos, asociaciones, asociaciones_aliasadas)
  klass = nulo
  Campo = nulo
  clave.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 utiliza 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.
    alias = met
    Si como && un(a) = como.Fetch(met, nulo)
      alias = un(a).a_s
    end

    Campo = nulo
    klass = nulo
    Si fs && f = fs[alias]
      Campo = f
      rendimiento(met, f, true) Si ¿bloque_dado?
    elsif rs && relación = rs[alias]
      klass = relación.klass
      rendimiento(met, relación, false) Si ¿bloque_dado?
    else
      rendimiento(met, nulo, false) Si ¿bloque_dado?
    end
  end
  Campo
end

Detalles del método de instancia

#apply_default(nombre) ⇒ Objeto

Aplica un único valor predeterminado para el nombre dado.

Ejemplos:

Aplica uno solo por defecto.

model.apply_default("name")

Parámetros:

  • Nombre (Cadena) -

    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 no ser que atributos.key?(Nombre)
    Si Campo = campos[Nombre]
      predeterminado = Campo.eval_default(yo)
      a no ser 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_valores predeterminados
  devoluciones de llamadas pendientes.borrar(:aplicar_valores_predeterminados)
  aplicar_valores_preprocesados_predeterminados
  aplicar_valores_predeterminados_post_procesados
end

#aplicar_valores_predeterminados_post_procesadosMatriz<String>

Aplicar todos los valores predeterminados al documento que son procedimientos.

Ejemplos:

Aplicar todos los valores predeterminados del procedimiento.

model.apply_post_processed_defaults

Devuelve:

  • (Matriz<String>)

    Los nombres de los procedimientos predeterminados.



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

def aplicar_valores_predeterminados_post_procesados
  devoluciones de llamadas pendientes.borrar(:aplicar valores predeterminados posprocesados)
  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:

Aplicar todos los valores predeterminados que no sean de procedimiento.

model.apply_pre_processed_defaults

Devuelve:

  • (Matriz<String>)

    Los nombres de los valores predeterminados que no son procedimientos.



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

def aplicar_valores_preprocesados_predeterminados
  valores predeterminados preprocesados.cada hacer |Nombre|
    aplicar_predeterminado(Nombre)
  end
end

#nombres_de_atributosMatriz<String>

Devuelve una matriz de nombres para los atributos disponibles en este objeto.

Proporciona los nombres de campo de forma independiente de ORM. Rails v3.1+ utiliza este método para encapsular automáticamente los parámetros en las solicitudes JSON.

Ejemplos:

Obtener los nombres de los campos

document.attribute_names

Devuelve:

  • (Matriz<String>)

    Los nombres de los campos



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

def nombres de atributos
  yo.clase.nombres de atributos
end

#database_field_name(nombre) ⇒ Cadena

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 (Cadena | Símbolo)

    El nombre a obtener.

Devuelve:

  • (Cadena) -

    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 nombre_del_campo_de_base_de_datos(Nombre)
  yo.clase.nombre_del_campo_de_base_de_datos(Nombre)
end

#dot_dollar_field?(nombre) ⇒ verdadero | falso

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 (Cadena) -

    El nombre del campo.

Devuelve:

  • (verdadero | falso)

    Si este campo está punteado o en dólares.



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

def dot_dollar_field?(Nombre)
  n = campos con alias[Nombre] || Nombre
  campos.key?(n) && (n.¿incluir?('.') || n.empezar_con?('$'))
end

#lazy_settable?(campo, valor) ⇒ verdadero | falso

¿El campo proporcionado es una evaluación perezosa?

Ejemplos:

Si el campo se puede configurar de forma diferida.

doc.lazy_settable?(field, nil)

Parámetros:

  • Campo (Campo) -

    El campo.

  • valor (Objeto) -

    El valor actual.

Devuelve:

  • (verdadero | falso)

    Si configuramos el campo de forma perezosa.



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

def ¿configurable de forma perezosa?(Campo, valor)
  !frozen? && valor.nil? && Campo.lazy?
end

#using_object_ids?verdadero | falso

Nota:

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

¿El documento utiliza identificadores de objetos?

Ejemplos:

¿El documento utiliza identificadores de objetos?

model.using_object_ids?

Devuelve:

  • (verdadero | falso)

    Usando identificadores de objetos.



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

def ¿usando_id_de_objeto?
  yo.clase.¿usando_id_de_objeto?
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.

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

Parámetros:

  • Nombre (Cadena) -

    El nombre del campo.

Aumentos:

  • (AsignaciónDotDollarno válida)

    Si contiene puntos o comienza con dólar.



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

def ¡validar_nombre_del_campo_escribible!(Nombre)
  Si dot_dollar_field?(Nombre)
    propagar Errors::Asignación de punto-dólar no válida.Nuevo(yo.clase, Nombre)
  end
end