22/01/2010 1 Comentário

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?

0 votos Vota!!


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.



Leia também:

  1. Dica Rápida – Como visualizar a saída SQL no script/console em projetos Rails
  2. [Dica rápida] Como formatar a saída da data no command do Windows?
  3. Dica Rápida – Adicionar novos campos em tabelas
  4. Dica Rápida – Firefox – Modo Privado de Navegação
  5. Dica rápida – Listar apenas emails não lidos no Gmail

Diego Roriz - diegororiz - Rails, Tecnologia e Desenvolvimento

Dica rápida – Como destruir registros em massa utilizando Rails?

0 votos Vota!!

Uma Resposta para “Dica rápida – Como destruir registros em massa utilizando Rails?”

  1. Luciano Bezerra 17/02/2010 em 11:49 #

    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


Deixe uma Resposta

Get Adobe Flash playerPlugin by wpburn.com wordpress themes