Diego Roriz - diegororiz - Rails, Tecnologia e Desenvolvimento
Dica rápida – Como destruir registros em massa utilizando Rails?
Dica rápida – Como destruir registros em massa utilizando Rails?
Você certamente já precisou destruir um conjunto de registros do banco em uma única operação. O ActiveRecord provê dois métodos que proporcionam essa funcionalidade: destroy_all e delete_all. Mas se os dois deletam registros da base, quando usar um e quando usar o outro? Qual a diferença entre eles?
O método delete_all deleta os registros que obedecerem às condições de exclusão informadas sem instanciar o registro e portanto, sem chamar o método destroy nem invocar os callbacks. O delete_all é apenas uma instrução SQL DELETE que é executada direto na base de dados, sendo muito mais eficiente que o destroy_all. O método delete_all retorna o número de registros afetados com a operação.
Já o método destroy_all destrói todos os registros que obedecerem ás condições de exclusão informadas instanciando um objeto para cada registro e chamado o método destroy. Todos os callbacks de cada objeto são executados, incluindo as opções de associação entre objetos :dependent e os before/aftersave. Uma coleção dos objetos destruídos é retornada. Os objetos desta coleção são classificados como congelados, visto que os objetos não podem ser nem salvos nem alterados.
Você também pode gostar de:


Diego Bom Dia!
Já utilizo o delete_all ha algum tempo, principalmente em seeds para não precisar ficar populando tabelas para testes. Uma coisa que ainda não encontrei foi uma forma de “resetar” o autoincremento do mysql ou postgresql, você sabe se o destroy_all faz isso? Ou você conhece alguma maneira de fazer isso?
Abraços