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.



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

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.



61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/mongoid/fields/foreign_key.rb', linha 61

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.



49
50
51
# File 'lib/mongoid/fields/foreign_key.rb', linha 49

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.



81
82
83
# File 'lib/mongoid/fields/foreign_key.rb', linha 81

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 .



93
94
95
96
97
98
99
# File 'lib/mongoid/fields/foreign_key.rb', linha 93

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.



107
108
109
110
# File 'lib/mongoid/fields/foreign_key.rb', linha 107

def object_id_field?
  @object_id_field ||=
    associação.polimórfico? || 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.



118
119
120
# File 'lib/mongoid/fields/foreign_key.rb', linha 118

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