Publicado por Rafael Rosa em 26 de March de 2009
Reimplementando acts_as_paranoid utilizando o default_scope do Rails 2.3
Há alguns meses Mike Gunderloy escreveu o artigo 3 Plugins para Deleções mais Seguras com ActiveRecord para o Rails Inside e mencionou o acts_as_paranoid, um plugin que marca os objetos ActiveRecord como excluídos sem efetivamente remove-los do banco de dados (o que pode ser útil se você precisar desfazer a exclusão depois).
Agora, Jeff Chupp utilizou o novo default_scope do Rails / ActiveRecord 2.3 para implementar uma funcionalidade similar ao acts_as_paranoid em apenas algumas linhas de código num model comum.. Ele também encapsulou essa funcionalidade num plugin, chamado is_paranoid. O Ryan Bates, do Railscasts, explicou essa nova funcionalidade há pouco tempo, clique aqui para ver o screencast.

Clique aqui para adicionar ao del.icio.us


26 de March de 2009 às 18:01
Poder recuperar dados depois é um recurso interessante, mas...
A maior vantagem de todas é quando você usa o acts_as_paranoid numa grande tabela, para não precisar apagar os registros.
No diHITT um grande problema era quando algum usuário queria apagar 1000 indicações de notícia de uma vez, numa tabela myisam.
Converter a tabela para innodb ajudou um pouco, mas o site praticamente parava toda vez que a tabela tinha muitos registros apagados.
Depois do plugin, o problema praticamente desapareceu. O RPM ainda mostra um pequeno spike nas deleções, mas nem se compara com antes.
26 de March de 2009 às 21:25
Eu fiz um plugin que faz a mesma coisa, usando default_scope, porém usa um campo booleano para marcar como excluído. Se alguém se interessar:
http://fernandoluizao.wordpress.com/2009/03/06/acts_as_active-mais-um-plugin-no-estilo-acts_as_paranoid/
http://github.com/fernandoluizao/acts_as_active
31 de March de 2009 às 20:06
Fernando, você pode usar o is_paranoid conforme o seu plugin