Header Ads Widget

Ticker

6/recent/ticker-posts

Eliminación suave de registros con Paranoia

 

Que aprenderemos:

  • Introducción a la joya de la paranoia
  • Instalación
  • ¿Cómo utilizar la funcionalidad Paranoia?
  • Conclusión
Foto de @xavi_cabrera en Unsplash


Introducción

  • La paranoia es una joya que le permite ocultar y restaurar registros sin eliminarlos y puede recuperarlos más tarde si lo desea.
  • Esta joya reimplementación de ActsAsParanoid

Instalación

Agregue la gema de paranoia a Gemfile:
joya 'paranoia', '~> 2.4'

Entonces corre:
instalación del paquete

Cree una migración para agregar una eliminación suave para el modelo de publicación:
bin / rails generan migración AddDeletedAtToPost deleted_at: datetime: index

La migración agregará la columna deleted_at   al modelo de publicación:
class AddDeletedAtToPost <ActiveRecord :: Migration [6.0]
   def change
     add_column : posts,: deleted_at,: datetime
     add_index : posts,: deleted_at
   end
fin

Ejecute la migración:
rails db: migrar

== 20201016152809 AddDeletedAtToPost: migrando ====================
- add_column (: publicaciones,: deleted_at,: datetime)
   -> 0.0333 s
- add_index (: publicaciones,: deleted_at)
   -> 0.0270 s
== 20201016152809 AddDeletedAtToPost: migrado (0.0605s) ===========


Uso

Habilite esta funcionalidad para el modelo de publicación:
clase Post <ActiveRecord :: Base
   actúa_as_paranoide

  [...]
fin

Paranoia cambiará el default_scope del modelo, lo que significa que Post.all no incluirá los registros eliminados.

Eliminación suave de un registro:

cuando destruimos un registro, establecerá la marca de tiempo actual en la   columna deleted_at
post.deleted_at
# => nada
post.destroy
# => publicar
post.deleted_at
# => [marca de tiempo actual] Viernes, 16 de octubre de 2020 15:39:19 UTC +00: 00

Restaurar un registro:
actualizará {deleted_at => nil}
post.restore
o
Post.restore (id)

Restaurar un registro y sus registros asociados destruidos de forma dependiente:
post.restore (: recursive => true)
o
Post.restore (id,: recursive => true)

Encuentra una publicación eliminada
Post.find (id)
# => ActiveRecord :: RecordNotFound
Post.unscoped.find (id) || Post.with_deleted.find (id)
# => publicar

Filtrado:

Encuentra todos los registros, incluye publicaciones eliminadas:
Post.with_deleted

Buscar registros, excluir publicaciones eliminadas:
Post.without_deleted

Encuentra solo las publicaciones eliminadas:
Publicación.only_deleted

Eliminar realmente una publicación
Si realmente quieres que desaparezca, ¡llama a really_destroy! :
post.really_destroy!

Conclusión

En este artículo, ya me guié sobre cómo eliminar registros en lugar de eliminar registros de forma permanente en la base de datos. La paranoia es en realidad una joya útil que facilita la eliminación suave.

Publicar un comentario

0 Comentarios