我需要能够从S3中删除用户存储的文件,例如个人资料照片。只是调用@user.logo.destroy
似乎没有办法 - 我在日志中得到[paperclip] Saving attachments.
,文件就在S3存储桶中。
如何删除文件本身?
答案 0 :(得分:2)
这是Paperclip中可用于删除附件的方法:
# Clears out the attachment. Has the same effect as previously assigning
# nil to the attachment. Does NOT save. If you wish to clear AND save,
# use #destroy.
def clear(*styles_to_clear)
if styles_to_clear.any?
queue_some_for_delete(*styles_to_clear)
else
queue_all_for_delete
@queued_for_write = {}
@errors = {}
end
end
# Destroys the attachment. Has the same effect as previously assigning
# nil to the attachment *and saving*. This is permanent. If you wish to
# wipe out the existing attachment but not save, use #clear.
def destroy
clear
save
end
所以你看,如果没有错误发生,destroy只删除附件。我已经尝试了自己对S3的设置,所以我知道毁灭有效。
您的案例中的问题可能是您有任何取消保存的验证吗? I.e validates_attachment_presence或类似的东西?
我认为找到的一种方法是尝试@ user.logo.destroy,然后检查@ user.errors的内容,看它是否报告任何错误消息。
答案 1 :(得分:1)
这似乎是对你的问题的回答,虽然我不完全理解他们在destroy和clear之间的区别(我不知道哪个模型has_attached_file,page或image):