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.