paranoia

· Padrão Banco de Dados
Juan Kalleo
Juan Kalleo
Backend/API
This page hasn't been translated to English yet — showing the original Portuguese content.

O que é

Gem de soft delete pra ActiveRecord — destroy marca uma coluna deleted_at em vez de remover a linha; consulta normal (Model.all/.find) já ignora registro marcado, sem precisar de WHERE manual em cada query.

Por que essa

Simples e direta pro caso deste projeto — soft delete em toda tabela, sem exceção, sem precisar de uma coluna de status própria pra "ativo". Ver Modelagem base pro efeito prático (por exemplo, num User, onde soft delete já produz o mesmo resultado de uma conta bloqueada).

Versão

paranoia (3.1.0)Gemfile.lock.

Como importar

# Gemfile
gem "paranoia"
# app/models/application_record.rb
acts_as_paranoid

A migration de cada tabela precisa da coluna deleted_at (ver Migrations — já entra por padrão no template de create_table do projeto).

Exemplo real

create_table :a_orgaos do |t|
  # ...
  t.datetime :deleted_at
end
orgao.destroy        # soft delete — marca deleted_at, não remove a linha
AOrgao.find(orgao.id) # ActiveRecord::RecordNotFound — já filtrado por padrão

AOrgao.only_deleted           # só os soft-deletados
AOrgao.with_deleted.find(id)  # inclui soft-deletado na busca
orgao.really_destroy!         # remoção física de verdade — raro, deliberado

Onde usar no projeto

Toda tabela, via ApplicationRecord — combinado com PaperTrail, um destroy fica totalmente reversível: a linha continua no banco (soft-deletada) e o histórico completo de quem/quando fica gravado.