Módulo: Mongoid::Persistable::Settable

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

Overview

Define el comportamiento para 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 campo/valor proporcionados y establezca los valores en el documento en la memoria.

La clave puede ser una secuencia de claves separadas por puntos, en cuyo caso el campo de nivel superior se trata como un hash anidado y cualquier clave que falte se crea automáticamente:

Realizar un conjunto anidado como este fusiona los valores de 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 establece un subconjunto del campo mediante la semántica hash anidada. Esto significa que realizar un $set con semántica de hash anidado puede sobrescribir otras claves de hash en el campo de nivel superior en la base de datos.

Ejemplos:

Definir los valores.

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

Establecer los valores utilizando la 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:



46
47
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
# Archivo 'lib/mongoid/persistable/settable.rb', línea 46

def Configura(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
        valor_antiguo = {} a menos que valor_antiguo.is_a?(encriptada)

        # 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
          cur_value[cur_key] = {} a menos que cur_value[cur_key].is_a?(encriptada)
          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)

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