Módulo: Mongoid::Changeable

Ampliado por:
ActiveSupport::Concern
Incluido en:
Compuesto
Definido en:
lib/mongoid/changeable.rb

Overview

Define el comportamiento para el seguimiento de cambios.

Definido bajo Namespace

Modules: ClassMethods Clases: Cualquier cosa

Resumen del método de instancia colapsar

Detalles del método de instancia

#atributo_antes_del_último_guardado(attr) ⇒ Objeto

Devuelve el valor original de un atributo antes del último guardado.

Este método es útil después de las devoluciones de llamadas para obtener el valor original de

an attribute before the save that triggered the callbacks to run.

Parámetros:

  • attr (Symbol | string)

    El nombre del atributo.

Devuelve:

  • (objeto)

    Valor del atributo antes del último guardado.



150
151
152
153
# Archivo 'lib/mongoid/changeable.rb', línea 150

def atributo_antes_del_último_guardado(attr)
  attr = database_field_name(attr)
  attributes_before_last_save[attr]
end

#changedarreglo<String>

Obtenga los atributos modificados para el documento.

Ejemplos:

Consigue los atributos modificados.

model.changed

Devuelve:

  • (arreglo<String>)

    Los atributos cambiados.



14
15
16
# Archivo 'lib/mongoid/changeable.rb', línea 14

def cambiado
  atributos_cambiados.claves.Seleccionar { |attr| attribute_change(attr) }
end

#¿cambio?true | false

¿Ha cambiado el documento?

Ejemplos:

¿Ha cambiado el documento?

model.changed?

Devuelve:

  • (true | false)

    Si se modifica el documento.



32
33
34
# Archivo 'lib/mongoid/changeable.rb', línea 32

def ¿cambió?
  Cambios.values.any? { |val| val } || ¿Los niños han cambiado?
end

#changed_attributesHash<String, Object>

Obtenha los cambios de atributos.

Ejemplos:

Obtenha los cambios de atributos.

model.changed_attributes

Devuelve:

  • (Hash<Cadena, Objeto>)

    El/los atributos cambian.



51
52
53
# Archivo 'lib/mongoid/changeable.rb', línea 51

def atributos_cambiados
  @changed_attributes ||= {}
end

#cambiosHash<String, Array<Object, Object> ] Los cambios.

Obtenga todos los cambios del documento.

Ejemplos:

Obtén todos los cambios.

model.changes

Devuelve:

  • (Hash<String, arreglo<objeto, objeto> ] Los cambios.)

    Hash<String, arreglo<objeto, objeto> ] Los cambios.



61
62
63
64
65
66
# Archivo 'lib/mongoid/changeable.rb', línea 61

def Cambios
  cambiado.each_with_object({}) hacer |attr, Cambios|
    cambio = attribute_change(attr)
    Cambios[attr] = cambio si cambio
  end.con_acceso_indiferente
end

#niños_cambiados?verdadero | falso

Nota:

Esto intencionalmente solo considera a los hijos y no a los descendientes.

¿Se ha realizado algún cambio en los elementos secundarios (documentos incrustados) de este documento?

Devuelve:

  • (true | false)

    Si algún niño ha cambiado.



41
42
43
# Archivo 'lib/mongoid/changeable.rb', línea 41

def ¿Los niños han cambiado?
  @los_niños_pueden_haber_cambiado || _children.any?(Y¿cambiado?)
end

#children_may_have_changed!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.

Indica que es posible que los hijos de este documento hayan cambiado y que se deben verificar cuando se valide el documento.



22
23
24
# Archivo 'lib/mongoid/changeable.rb', línea 22

def es posible que los niños hayan cambiado.
  @los_niños_pueden_haber_cambiado = true
end

#move_changesObject

Llame a este método después de guardar para que los cambios puedan realizarse correctamente.

Esto desarmará la matriz de hijos memorizada, establecerá el indicador de nuevo registro en falso, establecerá el documento como validado y moverá los cambios sucios.

Ejemplos:

Mueve los cambios a los anteriores.

person.move_changes


75
76
77
78
79
80
81
82
83
# Archivo 'lib/mongoid/changeable.rb', línea 75

def move_changes
  @changes_before_last_save = @previous_changes
  @previous_changes = Cambios
  @attributes_before_last_save = @atributos_anteriores
  @atributos_anteriores = atributos.dup
  @los_niños_pueden_haber_cambiado = false
  reset_atomic_updates!
  atributos_cambiados.borrar
end

#post_persistobjeto

Cosas que deben ejecutarse después de que se haya almacenado un documento.

Ejemplos:

Gestiona la persistencia de publicaciones.

document.post_persist


89
90
91
92
93
# Archivo 'lib/mongoid/changeable.rb', línea 89

def post_persist
  reset_persisted_descendants
  reset_attributes_before_type_cast
  move_changes
end

#previous_changesHash<String, Array<Object, Object> ] Los cambios anteriores.

Obtén los cambios anteriores en el documento.

Ejemplos:

Obten las modificaciones anteriores.

model.previous_changes

Devuelve:

  • (Hash<String, Array<Object, Object> ] Los cambios anteriores.)

    Hash<String, arreglo<objeto, objeto>> Los cambios anteriores.



101
102
103
# Archivo 'lib/mongoid/changeable.rb', línea 101

def previous_changes
  @previous_changes ||= {}
end

#remove_change(name) ⇒ objeto

Eliminar un cambio del hash de atributos sucios. Usado por los actualizadores atómicos de un solo campo.

Ejemplos:

Eliminar un cambio marcado.

model.remove_change(:field)

Parámetros:

  • Nombre (Symbol | string)

    El nombre del campo.



112
113
114
# Archivo 'lib/mongoid/changeable.rb', línea 112

def eliminar_cambio(Nombre)
  atributos_cambiados.borrar(Nombre.to_s)
end

#saved_change_to_attribute(attr) ⇒ Array<Object> | nil

Devuelve el cambio en un atributo durante el último guardado.

Parámetros:

  • attr (Symbol | string)

    El nombre del atributo.

Devuelve:

  • (Array<Object> | nil)

    Si se modificó el atributo, devuelve una matriz que contiene el valor original y el valor guardado, de lo contrario, nulo.



161
162
163
164
# Archivo 'lib/mongoid/changeable.rb', línea 161

def saved_change_to_attribute(attr)
  attr = database_field_name(attr)
  previous_changes[attr]
end

#saved_change_to_attribute?(attr, from: Utils::PLACEHOLDER, to: Utils::PLACEHOLDER) ⇒ true | false

Devuelve si este atributo cambió durante el último guardado.

Este método es útil en las devoluciones de llamada posteriores para ver el cambio

in an attribute during the save that triggered the callbacks to run.

Parámetros:

  • attr (string)

    El nombre del atributo.

  • de (Objeto) (predeterminado: Utils::PLACEHOLDER)

    El objeto desde el cual se cambió el atributo (opcional).

  • to (Objeto) (predeterminado: Utils::PLACEHOLDER)

    El objeto al que se cambió el atributo (opcional).

Devuelve:

  • (true | false)

    Si el atributo ha cambiado durante el último guardado.



176
177
178
179
180
181
182
183
184
185
# Archivo 'lib/mongoid/changeable.rb', línea 176

def saved_change_to_attribute?(attr, de: Utils::MARCADOR DE POSICIÓN, a: Utils::MARCADOR DE POSICIÓN)
  Cambios = saved_change_to_attribute(attr)
  return false a menos que Cambios.is_a?(Arreglo)

  return true si Utils.placeholder?(de) && Utils.placeholder?(to)
  return Cambios.primero == de si Utils.placeholder?(to)
  return Cambios.último == to si Utils.placeholder?(de)

  Cambios.primero == de && Cambios.último == to
end

#asignadoresHash

Obtiene todos los nuevos valores para cada uno de los campos modificados, que se deben pasar a un modificador $set de MongoDB.

Ejemplos:

Obtén los definidores para las actualizaciones atómicas.

person = Person.new(:title => "Sir")
person.title = "Madam"
person.setters # returns { "title" => "Madam" }

Devuelve:

  • (encriptada)

    Un Hash de configuradores atómicos.



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# Archivo 'lib/mongoid/changeable.rb', línea 125

def asignadores
  mods = {}
  Cambios.each_pair hacer |Nombre, Cambios|
    siguiente a menos que Cambios

    antiguo, Nuevo = Cambios
    Campo = campos[Nombre]
    llave = atomic_attribute_name(Nombre)
    si Campo&.¿redimensionable?
      Campo.add_atomic_changes(sí mismo, Nombre, llave, mods, Nuevo, antiguo)
    else
      mods[llave] = Nuevo a menos que atomic_unsets.incluir?(llave)
    end
  end
  mods
end

#will_save_change_to_attribute?(attr, **kwargs) ⇒ true | false

Devuelve si este atributo cambia la siguiente vez que guardemos.

Este método es útil en las validaciones y antes de las funciones de retorno para determinar

if the next call to save will change a particular attribute.

Parámetros:

  • attr (string)

    El nombre del atributo.

  • **kwargs

    Los argumentos opcionales de palabra clave.

Devuelve:

  • (true | false)

    Si el atributo cambia la siguiente vez que guardemos.



199
200
201
# Archivo 'lib/mongoid/changeable.rb', línea 199

def ¿se guardará el cambio en el atributo?(attr, **kwargs)
  ¿atributo_cambiado?(attr, **kwargs)
end