Classe: Mongoid::Fields::ForeignKey

Herda:
Padrão
  • Objeto
mostrar tudo
Definido em:
lib/mongoid/fields/foreign_key.rb

Visão geral

Representa uma definição de campo de documento BSON que armazena uma chave estrangeira que faz referência ao ID de outro documento. Usado para comportamento de associação.

Resumo do atributo de instância

Atributos herdados do Padrão

#default_val, #label, #name, #options

Recolhimento do Resumo do método de instância

Métodos herdados do Padrão

#association, #eval_default, #initialize, #localize_present?, #localizado?, #pre_processed?, #type

Detalhes do construtor

Esta classe herda um construtor de Mongoid::Fields::Standard

Detalhes do método de instância

#add_atomic_changes(documento, name, key, mods, new_elements, old_elements) ➤ Object

Adiciona as alterações atômicas para este tipo de campo redimensionável.

@todo: Refactor, grande momento.

Exemplos:

Adicione as alterações atômicas.

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

Parâmetros:

  • documento (Documento)

    O documento ao qual adicionar.

  • name (string)

    O nome do campo.

  • chave (string)

    A localização atômica do campo.

  • mods (Hash)

    As modificações atuais.

  • new_elements (Array)

    Os novos elementos a serem adicionados.

  • old_elements (Array)

    Os elementos antigos sendo removidos.



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

def add_atomic_changes(documento, name, chave, mods, new_elements, old_elements)
  antigo = (old_elements || [])
  Novo = (new_elements || [])
  se Novo.Tamanho > antigo.Tamanho
    se Novo.primeiro(antigo.Tamanho) == antigo
      documento.atomic_array_add_to_sets[chave] = Novo.derrubar(antigo.Tamanho)
    mais
      mods[chave] = documento.attributes[name]
    end
  elsif Novo.Tamanho < antigo.Tamanho
    puxa = antigo - Novo
    se Novo == antigo - puxa
      documento.atomic_array_pulls[chave] = puxa
    mais
      mods[chave] = documento.attributes[name]
    end
  elsif Novo != antigo
    mods[chave] = documento.attributes[name]
  end
end

#evolua(objeto) ➤ Objeto

Evolua o objeto para um objeto compatível com ID .

Exemplos:

Evolua o objeto.

field.evolve(object)

Parâmetros:

  • objeto (Objeto)

    O objeto a ser desenvolvido.

Retorna:

  • (Objeto)

    O objeto evoluído.



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/mongoid/fields/foreign_key.rb', linha 64

def evolua(objeto)
  se object_id_field? || objeto.is_a?(Documento)
    se associação.polimórfico?
      associação.convert_to_foreign_key(objeto)
    elsif objeto.is_a?(Documento) && objeto.respond_to?(associação.primary_key)
      primary_key_field.evolua(objeto.enviar(associação.primary_key))
    mais
      objeto.__evolve_object_id__
    end
  mais
    relationships_id_field.evolua(objeto)
  end
end

#foreign_key?verdadeiro | false

Este campo é uma chave estrangeira?

Exemplos:

O campo é uma chave estrangeira?

field.foreign_key?

Retorna:

  • (verdadeiro | falso)

    Se o campo for uma chave estrangeira.



52
53
54
# File 'lib/mongoid/fields/foreign_key.rb', linha 52

def foreign_key?
  true
end

#preguiçoso?verdadeiro | false

Este campo faz avaliação padrão preguiçosa?

Exemplos:

O campo é preguiçoso?

field.lazy?

Retorna:

  • (verdadeiro | falso)

    Se o campo for lento.



84
85
86
# File 'lib/mongoid/fields/foreign_key.rb', linha 84

def preguiçoso?
  type.redimensionável?
end

#mongoize(objeto) ➤ Objeto

Mongoize o objeto no valor amigável do mongo .

Exemplos:

Mongoize o objeto.

field.mongoize(object)

Parâmetros:

  • objeto (Objeto)

    O objeto para Mongoizar.

Retorna:

  • (Objeto)

    O objeto mongoizado .



96
97
98
99
100
101
102
# File 'lib/mongoid/fields/foreign_key.rb', linha 96

def mongoize(objeto)
  se type.redimensionável? || object_id_field?
    mongoize_foreign_key(objeto)
  mais
    relationships_id_field.mongoize(objeto)
  end
end

#object_id_field?verdadeiro | false

O campo é um BSON::ObjectId?

Exemplos:

O campo é um BSON::ObjectId?

field.object_id_field?

Retorna:

  • (verdadeiro | falso)

    Se o campo for um BSON::ObjectId.



110
111
112
113
# File 'lib/mongoid/fields/foreign_key.rb', linha 110

def object_id_field?
  @object_id_field ||=
      associação.polimórfico? ? true : associação.classe.usando_object_ids?
end

#redimensionável?verdadeiro | false

Retorna verdadeiro se for uma array, falso se não for.

Exemplos:

O campo é redimensionável?

field.resizable?

Retorna:

  • (verdadeiro | falso)

    Se o campo for redimensionável.



121
122
123
# File 'lib/mongoid/fields/foreign_key.rb', linha 121

def redimensionável?
  type.redimensionável?
end