Por que o Rails ignora uma reversão em uma transação aninhada (pseudo)?
De acordo com os documentosActiveRecord :: Transactions :: ClassMethods, uma transação aninhada não nova ignorará uma reversão. Dos documentos:
User.transaction do
User.create(username: 'Kotori')
User.transaction do
User.create(username: 'Nemu')
raise ActiveRecord::Rollback
end
end
oraise ActiveRecord::Rollback
é ignorado porque está em uma transação filha (ou melhor, ainda está dentro da transação pai e não na sua). Não entendo por que a chamada de reversão seria ignorada por ambos? Percebo que, como a transação 'filho' não é realmente uma transação, ela não reverteria o bloco 'Nemu', mas por que não aciona uma reversão para o pai? A transação filho oculta a reversão de alguma forma?
Em outras palavras, por que parece que não há como reverter uma transação pai de dentro de um filho aninhado?