2010-05-25 2 views
4

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

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

Я пробовал self.sourcefile = nil if !sourcefile.dirty? в исполнении before_destroy, но это не повлияло.

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

скрепки

Любые идеи?

ответ

10

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

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

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

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

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

+0

Да, я вижу, что это говорит о том, что в журналах, но он просто никогда не отражался на моей файловой системе, поэтому я просто решил использовать прямой доступ к AWS, так как скрепка также не совсем работала (независимо от вещи удаления файла) –

0

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

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

+0

Я использую это, но мои файлы все еще остаются. :( –

+0

очень странно. Единственное, что я могу придумать, это открыть проблему:/http://github.com/thoughtbot/paperclip/issues – theIV

+0

Да, это действительно расстраивает. Я пробовал называть 'destroy_attached_files' нет, файлы все еще сидят там. Я могу просто отказаться от paperclip –