Que aprenderemos:
- Introducción a la joya de la paranoia
- Instalación
- ¿Cómo utilizar la funcionalidad Paranoia?
- Conclusión

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.
0 Comentarios
Dejanos tu comentario para seguir mejorando!