Módulo: Mongoide::Persistente::Configurable
- Ampliado por:
- ActiveSupport::Preocupación
- Incluido en:
- Mongoid::Persistable
- Definido en:
- lib/mongoid/persistable/settable.rb
Overview
Define el comportamiento de las operaciones $set.
Colapso del resumen del método de instancia
-
#set(setters) ⇒ Documento
Realice una operación $set en los pares de campo/valor proporcionados y establezca los valores en el documento en la memoria.
Detalles del método de instancia
#set(setters) ⇒ Documento
Realice una operación $set en los pares de campo/valor proporcionados y establezca los valores en el documento en la memoria.
La clave puede ser una secuencia de claves punteadas, en cuyo caso el campo de nivel superior se trata como un hash anidado y cualquier clave faltante se crea automáticamente:
Al realizar un conjunto anidado como este, se fusionan los valores de las claves intermedias:
Si el campo de nivel superior no era un hash, se descarta su valor original y el campo se reemplaza con un hash.
Tenga en cuenta que, a diferencia de $set de MongoDB, set de Mongoid escribe el campo completo, incluso al configurar un subconjunto del campo mediante la semántica hash anidada. Esto significa que ejecutar un $set con semántica hash anidada puede sobrescribir otras claves hash dentro del campo de nivel superior de la base de datos.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# Archivo 'lib/mongoid/persistable/settable.rb', línea 48 def conjunto(setters) preparar_operación_atómica hacer |ops| operaciones atómicas del proceso(setters) hacer |Campo, valor| secuencia_de_campo = Campo.a_s.división('.') Campo = secuencia_de_campo.cambio Si secuencia_de_campo.longitud > 0 # ruta hash anidada valor_antiguo = atributos[Campo] # si el valor antiguo no es un hash, elimínelo a no ser que Picadillo === valor_antiguo valor_antiguo = {} end # descender al hash, creando claves intermedias según sea necesario valor actual = valor_antiguo mientras secuencia_de_campo.longitud > 1 cur_key = secuencia_de_campo.cambio # golpe en cada nivel si el tipo no es un hash a no ser que Picadillo === valor actual[cur_key] valor actual[cur_key] = {} end valor actual = valor actual[cur_key] end # ahora estamos en el nivel de hoja, realizamos el conjunto # y sobrescribir todo lo que había en este nivel antes valor actual[secuencia_de_campo.cambio] = valor # y establezca el valor en el valor del campo de nivel superior # porque esto es lo que pasamos a $set valor = valor_antiguo end atributo_de_proceso(Campo, valor) a no ser que relaciones.¿incluir?(Campo.a_s) ops[nombre_del_atributo_atómico(Campo)] = atributos[Campo] end end { "$set" => ops } a no ser que ops.¿vacío? end end |