5 Stimmen

Paperclip - Datei von Amazon S3 löschen?

Ich muss in der Lage sein, Dateien von S3 zu löschen, die von Benutzern gespeichert werden, wie z.B. Profilfotos. Einfach @user.logo.destroy aufzurufen, scheint nicht zu funktionieren - ich erhalte [paperclip] Anhänge speichern. in den Logs und die Datei bleibt weiterhin im S3-Bucket.

Wie kann die Datei selbst entfernt werden?

3voto

DanneManne Punkte 20806

Dies sind die Methoden von Paperclip, die zum Entfernen der Anhänge verwendet werden können:

# Löscht den Anhang. Hat den gleichen Effekt wie das zuvorige Zuweisen von nil an den Anhang. Wird NICHT gespeichert. Wenn Sie löschen und speichern möchten, verwenden Sie #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

# Zerstört den Anhang. Hat den gleichen Effekt wie das zuvorige Zuweisen von nil an den Anhang *und das Speichern*. Dies ist dauerhaft. Wenn Sie den bestehenden Anhang löschen möchten, aber nicht speichern, verwenden Sie #clear.
def destroy
  clear
  save
end

Also sehen Sie, destroy entfernt den Anhang nur, wenn kein Fehler auftritt. Ich habe es mit meiner eigenen Einrichtung gegen S3 ausprobiert, also weiß ich, dass destroy funktioniert.

Könnte das Problem in Ihrem Fall möglicherweise darin bestehen, dass Sie Validierungen haben, die das Speichern abbrechen? Also z.B. validates_attachment_presence oder ähnliches?

Ich denke, eine Möglichkeit, das herauszufinden, wäre @user.logo.destroy zu versuchen und dann den Inhalt von @user.errors zu überprüfen, um zu sehen, ob Fehlermeldungen gemeldet werden.

1voto

John Bachir Punkte 21921

Dies scheint eine Antwort auf Ihre Frage zu sein, obwohl ich ihren Unterschied zwischen zerstören und löschen nicht vollständig verstehe (ich weiß nicht, welches Modell has_attached_file hat, Seite oder Bild):

Rails Paperclip wie Anhang löschen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X