Как получить скрепку для удаления файлов - PullRequest
4 голосов
/ 25 мая 2010

У меня есть модель, которая использует Paperclip для управления файлом.

После того, как я удалю модель, я, очевидно, хотел бы, чтобы файл также был удален, но я не могу выяснить, как удалить файл с помощью Paperclip.

Я пробовал self.sourcefile = nil if !sourcefile.dirty? в before_destroy def, но это не имело никакого эффекта.

(я хочу иметь возможность удалить его локально при тестировании, а затем на S3, когда я его использую - поэтому мне нужно чистое решение для скрепок)

Есть идеи?

Ответы [ 2 ]

10 голосов
/ 26 мая 2010

Скрепка довольно шумная, когда не удается удалить файл.

Без какой-либо специальной настройки при удалении объекта связанные с ним файлы, если они есть, также удаляются, и это отмечается в журнале (по крайней мере, в режиме разработки):

[paperclip] Deleting attachments.
[paperclip] deleting /clipper/public/system/avatars/3/original/whatever.JPG

Если Paperclip не сможет удалить файл, он просто выдаст исключение.

Все это было протестировано с помощью новейшего Paperclip (клонировано с github 25 мая). Если у вас более старая версия, вы можете обновить ее, а затем запустить несколько тестов, просматривая журналы.

0 голосов
/ 25 мая 2010

Возможно, я ошибаюсь, но я считаю, что он должен делать это автоматически, поскольку has_attached_file добавляет before_destroy обратный вызов. Источник .

Редактировать: Если это не работает, возможно, вы могли бы попробовать позвонить destroy_attached_files самостоятельно, что показалось бы мне странным. Источник .

...