Sessões
Você pode usar sessões com o Mongoid de forma semelhante à que executaria uma transação no ActiveRecord. Ou seja, você pode chamar um método, #with_session
em uma classe de modelo ou em uma instância de um modelo e executar algumas operações em um bloco. Todas as operações no bloco serão executadas no contexto de sessão única. Consulte a documentação do driver Ruby do MongoDB para saber quais opções de sessão estão disponíveis.
Observe as seguintes limitações de sessões:
As sessões não podem ser compartilhadas entre threads; as sessões não são seguras para threads. Isso é consistente com o suporte do driver Ruby para sessões.
As sessões não podem ser aninhadas. Você não pode chamar
#with_session
em uma classe de modelo ou em uma instância de modelo dentro do bloco passado para o método#with_session
em outra classe de modelo ou instância de modelo.Todas as classes e instâncias de modelo usadas no bloco de sessão devem usar o mesmo driver cliente. Por exemplo, se você especificou um
storage_options
diferente para outro modelo usado no bloco da classe do modelo ou instância na qual o#with_session
é chamado, você receberá um erro.
Utilizando uma sessão via Model#with_session
Chame #with_session
em uma classe de modelo e passe as opções de sessão para executar um bloco no contexto de uma sessão.
Person.with_session(causal_consistency: true) do Person.create! person = Person.first person.name = "Emily" person.save end
Usando uma sessão via model#with_session
Chame #with_session
em uma instância de modelo e passe as opções de sessão para executar um bloco no contexto de uma sessão.
person.with_session(causal_consistency: true) do person.username = 'Emily' person.save person.posts << Post.create! end