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
-
.database_field_name(nombre, relaciones, campos con alias, asociaciones con alias) ⇒ Cadena
privada
Obtenga el nombre del campo proporcionado tal como está almacenado en la base de datos.
-
.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.
-
.options ⇒ Hash
Devuelve un mapa de nombres de opciones personalizadas a sus controladores.
-
.traverse_association_tree(clave, campos, asociaciones, asociaciones_alias) {|El, El, Si|... } ⇒ Campo
privada
Recorra el árbol de asociación y busque el campo para la clave dada.
Colapso del resumen del método de instancia
-
#apply_default(nombre) ⇒ Objeto
Aplica un único valor predeterminado para el nombre dado.
-
#apply_defaults ⇒ Objeto
Aplicar todos los valores predeterminados a la vez.
-
#aplicar_valores_predeterminados_post_procesados ⇒ Matriz<String>
Aplicar todos los valores predeterminados al documento que son procedimientos.
-
#apply_pre_processed_defaults ⇒ Array<String>
Aplica todos los valores por defecto al documento que no sean procedimientos.
-
#nombres_de_atributos ⇒ Matriz<String>
Devuelve una matriz de nombres para los atributos disponibles en este objeto.
-
#database_field_name(nombre) ⇒ Cadena
Obtenga el nombre del campo proporcionado tal como está almacenado en la base de datos.
-
#dot_dollar_field?(nombre) ⇒ verdadero | falso
privada
¿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?
-
#using_object_ids? ⇒ verdadero | falso
¿El documento utiliza identificadores de objetos?
-
#¡validar_nombre_del_campo_escribible!(nombre) ⇒ Objeto
privada
Valide si el campo comienza con un signo de dólar ($) o contiene un punto (.).
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.
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.
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 personalizadas a sus controladores.
309 310 311 |
# Archivo 'lib/mongoid/fields.rb', línea 309 def @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.
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.
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_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_valores predeterminados devoluciones de llamadas pendientes.borrar(:aplicar_valores_predeterminados) aplicar_valores_preprocesados_predeterminados aplicar_valores_predeterminados_post_procesados end |
#aplicar_valores_predeterminados_post_procesados ⇒ Matriz<String>
Aplicar todos los valores predeterminados al documento que son procedimientos.
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_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_valores_preprocesados_predeterminados valores predeterminados preprocesados.cada hacer |Nombre| aplicar_predeterminado(Nombre) end end |
#nombres_de_atributos ⇒ Matriz<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.
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.
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 (.)?
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?
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
Refactorizado a partir del uso de delegado para mejorar el rendimiento de carga de clases.
¿El documento utiliza 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 (.).
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 |