Ruby · Avançado · Inglês · Técnico
transaction
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 escritasExemplos
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