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
-
.database_field_name(name, relations, aliased_fields, aliased_associations) ⇒ String
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 para ser ejecutado cuando el nombre de la opción especificada se defina 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 por defecto 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 el signo de dólar ($) o contiene punto (.)?.
-
#lazy_settable?(campo, valor) ⇒ verdadero | falso
¿El campo proporcionado es una evaluación perezosa?.
-
#utilizando_identificadores_de_objetos? ⇒ true | false
¿El documento utiliza IDs de objeto?.
-
#validate_writable_field_name!(nombre) ⇒ Object
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 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.
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.
294 295 296 |
# Archivo 'lib/mongoid/fields.rb', línea 294 def Opción(option_name, &bloque) [option_name] = bloque end |
.options ⇒ Hash
Devuelve un mapa de nombres de opciones personalizados y sus manejadores.
305 306 307 |
# Archivo 'lib/mongoid/fields.rb', línea 305 def @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.
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.
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_defaults ⇒ Objeto
Aplicar todos los valores por defecto a la vez.
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_defaults ⇒ arreglo<String>
Aplicar todos los valores por defecto en el documento que sean procesos.
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_defaults ⇒ Array<String>
Aplica todos los valores por defecto al documento que no sean procedimientos.
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_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.
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.
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 (.)?
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?
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
Refactorizado para no usar delegado para el rendimiento de carga de clases.
¿El documento utiliza identificadores de objeto?
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 (.).
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 |