ActiveRecord: transações
O curso trata de ActiveRecord::Base.transaction no código da aplicação, para quando várias escritas relacionadas precisam dar certo ou falhar juntas. Ele testa quais jeitos de sair de um bloco disparam rollback: uma exceção levantada desfaz tudo, enquanto um return simples ou um valor falso grava. Mostra o ActiveRecord::Rollback para cancelar em silêncio, os blocos aninhados que entram na transação externa e o requires_new: true com savepoints. Depois lê, linha por linha, o CompleteLessonService e o AccountUpdateService deste app e explica por que save! e update! importam dentro de uma transação.
O que você vai aprender
- ✓Como ActiveRecord::Base.transaction torna um grupo de escritas tudo ou nada
- ✓Por que só uma exceção levantada faz rollback, enquanto return e valores falsos gravam
- ✓Quando usar ActiveRecord::Rollback para um cancelamento esperado e silencioso
- ✓Como transações aninhadas entram na externa e o que requires_new: true muda
- ✓Por que save! e update! decidem se escritas anteriores do bloco são desfeitas
ActiveRecord::Base.transaction: todas as suas escritas, ou nenhuma
ActiveRecord: migrations multi-tabela mostrou que o Rails envolve o change inteiro de uma migration comum numa transação de banco, e várias chamadas create_table entram todas ou nenhuma entra. Ninguém escreveu essa transação à mão; o Rails a forneceu. Este curso trata da mesma garantia escrita de…
Ler a aula completa grátis →Currículo
7 aulasActiveRecord::Base.transaction: todas as suas escritas, ou nenhuma
Envolve várias escritas relacionadas num bloco ActiveRecord::Base.transaction para que todas se tornem duráveis juntas ou nenhuma.
O que dispara um rollback
Testa três jeitos de sair de um bloco de transação: uma exceção desfaz tudo, e um return simples grava.
ActiveRecord::Rollback: cancelando sem levantar um erro
Mostra como ActiveRecord::Rollback desfaz toda escrita do bloco sem propagar uma exceção para o código que chamou.
Transações aninhadas e a armadilha do requires_new
Explica por que uma transação aninhada entra na externa por padrão e como requires_new: true cria um savepoint.
Lendo o CompleteLessonService deste app, linha por linha
Lê o CompleteLessonService deste app linha por linha e mostra que a segurança dele depende da posição do return.
Por que save! importa mais dentro de uma transação do que fora
Mostra por que save e update simples deixam escritas pela metade numa transação e como update! evita isso.
Juntando tudo: o que protege um bloco de escritas
Confere cada regra no AccountUpdateService, na suíte RSpec dele e no commit que trocou as escritas por update!.