如何让纸夹删除文件

4
我有一个模型,使用Paperclip来管理文件。
当我删除模型时,显然希望文件也被删除,但我似乎找不到使用Paperclip删除文件的方法。
我尝试在 `before_destroy` 方法中使用 self.sourcefile = nil if !sourcefile.dirty?,但没有效果。
(我想要能够在测试时本地删除文件,然后在使用S3时也能够实现 - 因此需要纯粹的Paperclip解决方案)
有什么想法吗?
2个回答

10

当Paperclip删除文件失败时,会产生相当嘈杂的日志。

默认情况下,删除对象时,相关的文件(如果有)也会被删除,并且这一操作在日志中有记录(至少在开发模式下有记录):

[paperclip] Deleting attachments.
[paperclip] deleting /clipper/public/system/avatars/3/original/whatever.JPG
如果Paperclip无法删除文件,它将简单地抛出异常。
所有这些都是使用最新的Paperclip(从github克隆于五月25日)进行测试的。如果您有旧版本,您可能需要更新它,然后在观察日志时运行一些测试。

是的,我可以在日志中看到它说了那个,但它从未反映在我的文件系统中,所以我选择直接使用AWS访问,因为无论如何,paperclip也不太起作用(无论文件删除是否发生)。 - Mitch Dempsey

0

我可能错了,但我认为它应该自动完成,因为has_attached_file添加了一个before_destroy回调。来源

编辑:如果它没有起作用,也许你可以尝试自己调用destroy_attached_files,但这对我来说似乎很奇怪。来源


我正在使用它,但我的文件仍然存在。 :( - Mitch Dempsey
非常奇怪。我能想到的唯一另一件事就是打开一个问题:/ http://github.com/thoughtbot/paperclip/issues - theIV
是的,这真的很令人沮丧。我尝试过调用 destroy_attached_files,但没有效果。文件仍然存在那里。我可能会放弃使用 Paperclip。 - Mitch Dempsey
我听到你的沮丧,不过我认为Paperclip是目前最好的文件附件选项之一。不过,我从来没有遇到过这个问题 :/ - theIV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接