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
-
.database_field_name(nombre, relaciones, campos con alias, asociaciones con alias) ⇒ Cadena
privado
Obtener el nombre del campo proporcionado tal como está almacenado en la base de datos.
-
.option(option_name, &block) ⇒ objeto
Almacena el bloque proporcionado que se ejecutará cuando el nombre de la opción especificada esté definido en un campo.
-
.options ⇒ Hash
Devuelve un mapa de nombres de opciones personalizados y sus manejadores.
-
.traverse_association_tree(key, fields, associations, aliased_associations) {| El, El, Si | ... } ⇒ Campo
privado
Recorrer hacia abajo el árbol de asociaciones y buscar el campo para la clave proporcionada.
Resumen del método de instancia colapsar
-
#apply_default(nombre) ⇒ Objeto
Aplica un valor por defecto único para el nombre dado.
-
#apply_defaults ⇒ Objecto
Aplicar todos los valores predeterminados a la vez.
-
#apply_post_processed_defaults ⇒ Arreglo<String>
Aplicar todos los valores por defecto en el documento que sean procesos.
-
#apply_pre_processed_defaults ⇒ Array<String>
Aplica todos los valores por defecto al documento que no sean procedimientos.
-
#attribute_names ⇒ arreglo<String>
Devuelve un arreglo de nombres de los atributos disponibles en este objeto.
-
#database_field_name(name) ⇒ String
Obtener el nombre del campo proporcionado tal como está almacenado en la base de datos.
-
#dot_dollar_field?(name) ⇒ true | false
privado
¿Este campo comienza con un signo de dólar ($) o contiene un punto (.)?
-
#lazy_settable?(campo, valor) ⇒ verdadero | falso
¿El campo proporcionado es una evaluación perezosa?
-
#utilizando_identificadores_de_objetos? ⇒ true | false
¿El documento utiliza identificadores de objetos?
-
#¡validar_nombre_del_campo_escribible!(nombre) ⇒ Objeto
privado
Validar si el campo comienza con un signo de dólar ($) o contiene un punto/periodo (.).
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.
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.
298 299 300 |
# Archivo 'lib/mongoid/fields.rb', línea 298 def opción(option_name, Ybloque) [option_name] = bloque end |
.options ⇒ Hash
Devuelve un mapa de nombres de opciones personalizados y sus manejadores.
309 310 311 |
# Archivo 'lib/mongoid/fields.rb', línea 309 def @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.
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.
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_defaults ⇒ Objeto
Aplicar todos los valores predeterminados a la vez.
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_procesados ⇒ Matriz<String>
Aplicar todos los valores por defecto en el documento que sean procesos.
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_defaults ⇒ Array<String>
Aplica todos los valores por defecto al documento que no sean procedimientos.
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_names ⇒ arreglo<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.
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.
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 (.)?
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?
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
Refactorizado a partir del uso de delegado para mejorar el rendimiento de carga de clases.
¿El documento utiliza identificadores de objeto?
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 (.).
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 |