2011-02-11 9 views
5

Tengo un modelo con un par de archivos adjuntos de imagen diferentes gestionados por clip. Recientemente cambiamos el comportamiento del modelo para que pueda ser borrado y revivido utilizando act_as_paranoid. Todo funciona muy bien, excepto que cuando borramos suavemente el modelo, el clip también elimina los archivos adjuntos.¿Cómo evito que el clip elimine archivos adjuntos de un modelo acts_as_paranoid?

He revisado los documentos del clip y el código, y no veo una forma obvia de eludir esto. Me gustaría poder decirle a paperclip que ignore las devoluciones de llamada en el modelo y mantenga los archivos adjuntos a su alrededor.

Respuesta

7

Paperclip ahora tiene una opción de preserve_files. La anulación no debería ser necesaria ahora.

Preservación de archivos para Soft-Delete

Está disponible una opción para preservar los archivos adjuntos con el fin de jugar muy bien con los modelos eliminados temporalmente. (Acts_as_paranoid, paranoia, etc.)

has_attached_file :some_attachment, { 
    :preserve_files => "true", 
} 

Esto evitará some_attachment de ser eliminada cuando el modelo se destruye, por lo que seguirá existiendo cuando el objeto se restaura después.

https://github.com/thoughtbot/paperclip#file-preservation-for-soft-delete

+0

impresionante! Gracias por actualizar esto (y mis disculpas por tardar tanto en volver y verlo). –

+0

¿Alguien más se da cuenta de que Paperclip todavía 'n out' todos los atributos importantes del archivo adjunto, incluso con esta opción de configuración? Por lo tanto, borrar el atributo 'deleted_at' para restaurar no es suficiente porque todos los atributos de los adjuntos ahora son' nil'. –

2

Loco cuántas veces encuentras la respuesta a tu propia pregunta justo después de que la pidas. Lo dejaré aquí en caso de que alguien más tenga el mismo problema, o tal vez alguien tenga una mejor solución para esto. Lo que funcionó para mí fue anular el método que usa paperclip para responder a la devolución de llamada before_destroy. Lo dejé caer en mi código y ahora conserva mis archivos adjuntos para que estén allí si recupero el modelo más tarde.

protected 

    def destroy_attached_files 
    logger.error "-------------- This is me NOT destroying my attachments" 
    end 
Cuestiones relacionadas