Clase: Mongoid::Fields::ForeignKey

Hereda:
Estándar
  • Objeto
Mostrar todo
Definido en:
lib/mongoid/fields/foreign_key.rb

Overview

Representa una definición de campo de documento BSON que almacena una clave foránea que referencia la ID de otro documento. Se usa para el comportamiento de asociación.

Resumen del atributo de la instancia

Atributos heredados de Estándar

#valor_predeterminado, #etiqueta, #nombre, #opciones

Resumen del método de instancia colapsar

Métodos heredados de Estándar

#asociación, #eval_default, #initialize, #localize_present?, #localized?, #pre_processed?, #type

Detalles del Constructor

Esta clase hereda un constructor de Mongoid::Fields::Standard

Detalles del método de instancia

#agregar_cambios_atómicos(documento, nombre, clave, modificadores, nuevos_elementos, elementos_anteriores) ⇒ Objeto

Agrega los cambios atómicos para este tipo de campo redimensionable.

@todo: Refactorizar, a lo grande.

Ejemplos:

Agrega los cambios atómicos.

field.add_atomic_changes(doc, "key", {}, [], [])

Parámetros:

  • Documento (documento)

    El documento al que agregar.

  • Nombre (string)

    El nombre del campo.

  • llave (string)

    La ubicación atómica del campo.

  • mods (encriptada)

    Las modificaciones actuales.

  • new_elements (arreglo)

    Los nuevos elementos a agregar.

  • old_elements (arreglo)

    Los elementos antiguos están siendo eliminados.



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 22

def add_atomic_changes(Documento, Nombre, llave, mods, new_elements, old_elements)
  antiguo = old_elements || []
  Nuevo = new_elements || []
  si Nuevo.longitud > antiguo.longitud
    si Nuevo.primero(antiguo.longitud) == antiguo
      Documento.atomic_array_add_to_sets[llave] = Nuevo.descartar(antiguo.longitud)
    else
      mods[llave] = Documento.atributos[Nombre]
    end
  elsif Nuevo.longitud < antiguo.longitud
    extracciones = antiguo - Nuevo
    si Nuevo == antiguo - extracciones
      Documento.atomic_array_pulls[llave] = extracciones
    else
      mods[llave] = Documento.atributos[Nombre]
    end
  elsif Nuevo != antiguo
    mods[llave] = Documento.atributos[Nombre]
  end
end

#evolve(objeto) ⇒ Objeto

Evoluciona el objeto en un objeto compatible con id.

Ejemplos:

Evolucionar el objeto.

field.evolve(object)

Parámetros:

  • Objeto (objeto)

    El objeto a evolucionar.

Devuelve:

  • (objeto)

    El objeto evolucionado.



61
62
63
64
65
66
67
68
69
70
71
72
73
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 61

def evolucionar(Objeto)
  si object_id_field? || Objeto.is_a?(Documento)
    si asociación.polimórfico?
      asociación.convert_to_foreign_key(Objeto)
    elsif Objeto.is_a?(Documento) && Objeto.respond_to?(asociación.clave_primaria)
      primary_key_field.evolucionar(Objeto.enviar(asociación.clave_primaria))
    else
      Objeto.__evolve_object_id__
    end
  else
    related_id_field.evolucionar(Objeto)
  end
end

#¿foreign_key?true | false

¿Es este campo una clave externa?

Ejemplos:

¿El campo es una clave foránea?

field.foreign_key?

Devuelve:

  • (true | false)

    Si el campo es una clave externa.



49
50
51
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 49

def foreign_key?
  true
end

#perezoso?verdadero | falso

¿Este campo realiza una evaluación perezosa por defecto?

Ejemplos:

¿El campo es perezoso?

field.lazy?

Devuelve:

  • (true | false)

    Si el campo es lazy.



81
82
83
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 81

def lazy?
  tipo.¿redimensionable?
end

#mongoize(objeto) ⇒ Objeto

Convierte el objeto en un valor compatible con Mongo.

Ejemplos:

Mongoize el objeto.

field.mongoize(object)

Parámetros:

  • Objeto (objeto)

    El objeto que se va a mongoizar.

Devuelve:

  • (objeto)

    El objeto mongoizado.



93
94
95
96
97
98
99
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 93

def mongoize(Objeto)
  si tipo.¿redimensionable? || object_id_field?
    mongoize_foreign_key(Objeto)
  else
    related_id_field.mongoize(Objeto)
  end
end

#object_id_field?verdadero | falso

¿Es el campo un BSON::ObjectId?

Ejemplos:

¿Es el campo un BSON::ObjectId?

field.object_id_field?

Devuelve:

  • (true | false)

    Si el campo es un BSON::ObjectId.



107
108
109
110
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 107

def object_id_field?
  @object_id_field ||=
    asociación.polimórfico? || asociación.klass.¿usando_object_ids?
end

#¿resizable?true | false

Devuelve true si es un arreglo, false si no lo es.

Ejemplos:

¿Se puede redimensionar el campo?

field.resizable?

Devuelve:

  • (true | false)

    Si el campo es redimensionable.



118
119
120
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 118

def ¿redimensionable?
  tipo.¿redimensionable?
end