2010-12-15 53 views
5

Je dois être en mesure de supprimer des fichiers de S3 stockés par les utilisateurs, tels que des photos de profil. Le simple fait d'appeler @user.logo.destroy ne semble pas faire l'affaire - je reçois [paperclip] Saving attachments. dans les journaux et le fichier reste là dans le compartiment S3.Paperclip - supprimer un fichier d'Amazon S3?

Comment le fichier peut-il être supprimé?

Répondre

2

ce sont les méthodes de Paperclip qui peuvent être utilisés pour enlever les pièces jointes:

module Paperclip 
    class Attachment 
    # 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 
     queue_existing_for_delete 
     @errors   = {} 
    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 

vous voyez, destroy ne supprime que la pièce jointe si aucune erreur ne se produit. Je l'ai essayé avec ma propre configuration contre S3 donc je sais que détruire fonctionne.

Le problème dans votre cas pourrait-il être que vous avez des validations qui annule la sauvegarde? I.e validates_attachment_presence ou quelque chose de similaire?

Je pense qu'un moyen de le savoir serait d'essayer @ user.logo.destroy, puis de vérifier le contenu de @ user.errors pour voir s'il signale des messages d'erreur.

+0

Je l'ai fait comme vous l'avez énuméré ici, pouvez-vous s'il vous plaît voir ma question ici: http://stackoverflow.com/questions/14144454/how-to-hook-for-destroy-of-a-model-that-belongs- à-un-autre-modèle – simo

1

Cela semble être une réponse à votre question, même si je ne comprends pas tout à fait leur distinction entre détruire et clair (je ne sais pas quel modèle has_attached_file, page ou image):

Rails Paperclip how to delete attachment?