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.



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

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.extracciones de matriz atómica[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.



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

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

#clave_externa?verdadero | falso

¿Es este campo una clave externa?

Ejemplos:

¿El campo es una clave externa?

field.foreign_key?

Devuelve:

  • (true | false)

    Si el campo es una clave externa.



52
53
54
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 52

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.



84
85
86
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 84

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 de Mongoizar.

Devuelve:

  • (objeto)

    El objeto mongoizado.



96
97
98
99
100
101
102
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 96

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

#object_id_field?verdadero | falso

¿El campo es un BSON::ObjectId?

Ejemplos:

¿El campo es un BSON::ObjectId?

field.object_id_field?

Devuelve:

  • (true | false)

    Si el campo es un BSON::ObjectId.



110
111
112
113
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 110

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

#¿resizable?true | false

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

Ejemplos:

¿El campo es redimensionable?

field.resizable?

Devuelve:

  • (true | false)

    Si el campo es redimensionable.



121
122
123
# Archivo 'lib/mongoid/fields/foreign_key.rb', línea 121

def ¿redimensionable?
  tipo.¿redimensionable?
end