Clase: Mongoid::Fields::ForeignKey

Hereda:
Estándar
  • Objeto
Mostrar todo
Definido en:
lib/mongoid/campos/clave_foránea.rb

Overview

Representa una definición de campo de documento BSON que almacena una clave externa que hace referencia al ID de otro documento. Se utiliza para la asociación.

Resumen de atributos de instancia

Atributos heredados de Standard

#valor_predeterminado, #etiqueta, #nombre, #opciones

Colapso del resumen del método de instancia

Métodos heredados del estándar

#asociación, #eval_default, #inicializar, #localizar_presente?, #localizado?, #pre_procesado?, #tipo

Detalles del constructor

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

Detalles del método de instancia

#add_atomic_changes(documento, nombre, clave, mods, nuevos_elementos, antiguos_elementos) ⇒ Objeto

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

@todo: Refactorizar, a lo grande.

Ejemplos:

Añade los cambios atómicos.

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

Parámetros:

  • Documento (Documento) -

    El documento a agregar.

  • Nombre (Cadena) -

    El nombre del campo.

  • clave (Cadena) -

    La ubicación atómica del campo.

  • mods (Hash)

    Las modificaciones actuales.

  • nuevos_elementos (Matriz)

    Los nuevos elementos a añadir.

  • elementos antiguos (Matriz)

    Los elementos antiguos se eliminan.



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 añadir cambios atómicos(Documento, Nombre, clave, mods, nuevos_elementos, elementos antiguos)
  antiguo = (elementos antiguos || [])
  Nuevo = (nuevos_elementos || [])
  Si Nuevo.longitud > antiguo.longitud
    Si Nuevo.primera(antiguo.longitud) == antiguo
      Documento.atomic_array_add_to_sets[clave] = Nuevo.descartar(antiguo.longitud)
    else
      mods[clave] = Documento.atributos[Nombre]
    end
  elsif Nuevo.longitud < antiguo.longitud
    tira = antiguo - Nuevo
    Si Nuevo == antiguo - tira
      Documento.extracciones de matriz atómica[clave] = tira
    else
      mods[clave] = Documento.atributos[Nombre]
    end
  elsif Nuevo != antiguo
    mods[clave] = Documento.atributos[Nombre]
  end
end

#evolucionar(objeto) ⇒ Objeto

Evolucionar el objeto a 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 ¿campo_id_del_objeto? || 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.__id_del_objeto_evolucionado__
    end
  else
    campo de identificación relacionado.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:

  • (verdadero | falso)

    Si el campo es una clave externa.



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

def ¿clave externa?
  true
end

#¿perezoso?verdadero | falso

¿Este campo realiza una evaluación predeterminada perezosa?

Ejemplos:

¿El campo está perezoso?

field.lazy?

Devuelve:

  • (verdadero | falso)

    Si el campo esta perezoso.



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

def lazy?
  tipo.¿redimensionable?
end

#mongoize(objeto) ⇒ Objeto

Mongoizar el objeto en el 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? || ¿campo_id_del_objeto?
    clave externa mongoize(Objeto)
  else
    campo de identificación relacionado.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:

  • (verdadero | falso)

    Si el campo es un BSON::ObjectId.



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

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

#¿redimensionable?verdadero | falso

Devuelve verdadero si es una matriz, falso si no lo es.

Ejemplos:

¿El campo es redimensionable?

field.resizable?

Devuelve:

  • (verdadero | falso)

    Si el campo es redimensionable.



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

def ¿redimensionable?
  tipo.¿redimensionable?
end