Ich verwende Paperclip (mit Amazon S3) auf Rails 3. Ich möchte einen vorhandenen Anhang löschen, ohne ihn durch eine Aktualisierungsaktion zu ersetzen .
Ich habe hier nur ein Beispiel dafür gefunden und konnte das nicht zum Laufen bringen, es wurde einfach nicht gelöscht und es gab nichts in den Protokollen, was sagen könnte, warum. Ich wollte so etwas auf dem Formular machen:
<%- unless @page.new_record? || !@page.image? -%>
<%= f.check_box :image_delete, :label => 'Delete Image' %>
<%- end -%>
(Seite ist der Name des Modells, Bild ist der Attributname, der den Anhang enthält)
Aber wie erkenne ich dieses Kontrollkästchen und was noch wichtiger ist, wie lösche ich das Bild? Ich freue mich über jede Hilfe!
quelle
has_attached_file
Namen "Bild" oder hat die Seite den Anhang "Bild"?self.image.clear if @image_delete == "1" and !image.dirty?
indestroy_image?
Methode ändertehas_attached_file :asset
=>
Büroklammer muss nicht zerstört werden.
In der Form
form.check_box(:delete_asset)
wird ausreichen.quelle
has_attached_file :asset
has_destroyable_file :asset
zuconfig/initializers/
reduzierenDies ist die Antwort von Benoit, die jedoch in ein Modul eingeschlossen ist und den Randfall verschachtelter Attributmodelle abdeckt, bei denen das Kontrollkästchen "Zerstören" das einzige ist, was am Modell geändert wurde.
Dies gilt für alle Anhänge des Modells.
quelle
attachment_definitions
habe gerade mein Leben gerettet.attr_accessible :"delete_#{name}"
include DeletableAttachment
unter denhas_attached_file
Anweisungen hinzu:delete_<your_attribute>
Sie daran, zuzulassen, wenn Sie starke Parameter in Ihrem Controller verwendenDenken Sie daran, dies auch Ihrem Seitenmodell hinzuzufügen:
quelle
Geänderte Version von Pauls Lösung zur Unterstützung von benutzerdefinierten Rails 5-Attributen. Ich wünschte nur, es gäbe eine Möglichkeit, das Modul vor den
has_attached_file
Definitionen oben in die Datei aufzunehmen .quelle
Konnte dies mit weniger Code erreichen, indem nur ein
delete_attachment
auf der Modellseite implementiert wurde :.quelle