Módulo: Mongoid::Persistable::Settable
- Estendido por:
- ActiveSupport::Concern
- Incluído em:
- Mongoid::Persistable
- Definido em:
- lib/mongoid/persistable/settable.rb
Visão geral
Define o comportamento das operações $set.
Recolhimento do Resumo do método de instância
-
#set(setters) ➤ Documento
Execute uma operação $set nos pares de campo/valor fornecidos e defina os valores no documento na memória.
Detalhes do método de instância
#set(setters) ➤ Documento
Execute uma operação $set nos pares de campo/valor fornecidos e defina os valores no documento na memória.
A chave pode ser uma sequência pontilhada de chaves, caso em que o campo de nível superior é tratado como um hash aninhado e quaisquer chaves ausentes são criadas automaticamente:
Executar um conjunto aninhado como este mescla valores de chaves intermediárias:
Se o campo de nível superior não for um hash, seu valor original será descartado e o campo será substituído por um hash.
Observe que, diferentemente do $set do MongoDB, o conjunto do Mongoid escreve o campo inteiro mesmo ao definir um subconjunto do campo por meio da semântica de hash aninhado. Isso significa que executar um $set com semântica de hash aninhada pode substituir outras chaves de hash no campo de nível superior do banco de dados de dados.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# Arquivo 'lib/mongoid/persistable/settable.rb', linha 48 def set(setters) prepare_atomic_operation fazer |ops| process_atomic_operations(setters) fazer |Campo, valor| field_seq = Campo.to_s.dividir('.') Campo = field_seq.mudança se field_seq.Tamanho > 0 # caminho de hash aninhado valor_antigo = attributes[Campo] # se o valor antigo não for um hash, substitua-o a menos que Hash === valor_antigo valor_antigo = {} end # desce ao hash, criando chaves intermediárias conforme necessário cur_value = valor_antigo enquanto field_seq.Tamanho > 1 cur_key = field_seq.mudança # clobber em cada nível se o tipo não for um hash a menos que Hash === cur_value[cur_key] cur_value[cur_key] = {} end cur_value = cur_value[cur_key] end # agora que estamos no nível da folha, execute o conjunto # e substitua o que estava neste nível antes cur_value[field_seq.mudança] = valor # e defina o valor para o valor do campo de nível superior # porque é isso que passamos para $set valor = valor_antigo end process_attribute(Campo, valor) a menos que relações.incluir?(Campo.to_s) ops[atomic_attribute_name(Campo)] = attributes[Campo] end end { "$set" => ops } a menos que ops.vazio? end end |