ExpertiDict

Ruby · Avançado · Inglês · Técnico

transaction

/tɹænˈzækʃən/substantivo

Bloco do ActiveRecord que executa várias operações de banco como uma unidade atômica: se ocorrer uma exceção, tudo é desfeito com rollback. Abre-se com ActiveRecord::Base.transaction ou Model.transaction.

Onde usar

Aparece em transferências, pedidos com itens e qualquer fluxo que não pode ficar pela metade. Ações externas, como e-mails, devem acontecer só depois do commit, por exemplo em after_commit.

Em código

ActiveRecord::Base.transaction do
  origem.update!(saldo: origem.saldo - 50)
  destino.update!(saldo: destino.saldo + 50)
end
# qualquer exceção desfaz as duas escritas

Exemplos

Wrap both updates in a transaction.

Envolva as duas atualizações em uma transaction.

If anything raises, the whole transaction rolls back.

Se qualquer coisa lançar exceção, a transaction inteira sofre rollback.

Cuidado

Em transações aninhadas, sem requires_new: true, um ActiveRecord::Rollback na interna é engolido e nada é desfeito.

Sinônimos

transação

Veja também

Todos os termos de Ruby