Módulo: Mongoid::Persistable::Settable

Ampliado por:
ActiveSupport::Concern
Incluido en:
Mongoid::Persistable
Definido en:
lib/mongoid/persistable/settable.rb

Overview

Define el comportamiento de las operaciones $set.

Resumen del método de instancia colapsar

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, su valor original se descarta y el campo se reemplaza con un hash.

Tenga en cuenta que, a diferencia del $set de MongoDB, el set de Mongoid escribe todo el campo incluso cuando se configura un subconjunto del campo a través de la semántica anidada de hash. Esto significa que realizar un $set con semántica de hash anidada puede sobrescribir otras claves hash dentro del campo de nivel superior en la base de datos.

Ejemplos:

Definir los valores.

document.set(title: "sir", dob: Date.new(1970, 1, 1))

Establezca los valores utilizando semántica hash anidada.

document.set('author.title' => 'Sir')
# => document.author == {'title' => 'Sir'}

Fusión de valores hash anidados.

document.set('author.title' => 'Sir')
document.set('author.name' => 'Linus Torvalds')
# => document.author == {'title' => 'Sir', 'name' => 'Linus Torvalds'}

El hash anidado sobrescribe un valor que no es de tipo hash.

document.set('author' => 'John Doe')
document.set('author.title' => 'Sir')
# => document.author == {'title' => 'Sir'}

Parámetros:

  • asignadores (encriptada)

    Los pares campo/valor a establecer.

Devuelve:



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(asignadores)
  preparar_operación_atómica hacer |ops|
    proceso_operaciones_atómicas(asignadores) hacer |Campo, Valor|

      field_seq = Campo.to_s.división('.')
      Campo = field_seq.turno
      si field_seq.longitud > 0
        # ruta de hash anidada
        valor_antiguo = atributos[Campo]

        # si el valor anterior no es un hash, sobrescribirlo
        a menos que Picadillo === valor_antiguo
          valor_antiguo = {}
        end

        # descender en la hash, creando claves intermedias según sea necesario
        cur_value = valor_antiguo
        mientras field_seq.longitud > 1
          cur_key = field_seq.turno
          # sobrescribir en cada nivel si el tipo no es un hash
          a menos que Picadillo === cur_value[cur_key]
            cur_value[cur_key] = {}
          end
          cur_value = cur_value[cur_key]
        end

        # ahora estamos en el nivel hoja, realiza el set
        # y sobrescribe todo lo que había en este nivel antes
        cur_value[field_seq.turno] = 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

      process_attribute(Campo, Valor)

      a menos que relaciones.incluir?(Campo.to_s)
        ops[atomic_attribute_name(Campo)] = atributos[Campo]
      end
    end
    { "$set" => ops } a menos que ops.¿vacío?
  end
end