2015-07-13 15 views
7

Ich benutze mehrere Datei-Uploads aus dem Master-Zweig und PostgreSQL Mein Produkt-Modell hat ein String-Feld namens "Bilder" und ich kann mehrere Bilder problemlos anschließen.Carrierwave mehrere Bild hochladen

Was ich aber nicht herausfinden kann, wie kann ich ein Bild von den Produkten entfernen? Ich kann alle Bilder entfernen, wie in der Dokumentation beschrieben:

product.remove_images! 
product.save 

aber nicht einen Weg finden, wie ein einzelnes Bild zu entfernen.

+1

Haben Sie 'images' oder' image' als Attributnamen? – Pavan

+0

"mehrere Datei-Uploads vom Master-Zweig" - gibt es neben carrierwave noch ein Juwel, oder was meinst du damit? – amiuhle

+0

überprüfen Sie https://github.com/carrierwaveuploader/carrierwave#multiple-file-uploads , wo es heißt: Hinweis: Sie müssen angeben, mit dem Master-Zweig, um diese Funktion zu aktivieren: – Cris

Antwort

0

Sie sollten remove_image auf dem angegebenen Bild (aus dem Array) verwenden können. Sie müssen also das Bild zuerst identifizieren (z. B. images[0].remove_image!)

+0

leider funktioniert das nicht :( – Cris

3

Haben Sie in Betracht gezogen, ein verschachteltes Formular für zu verwenden, um ein Bild zu löschen?

ist hier ein Stück Code von github Website carrierwave ...

<%= form_for @product, html: { multipart: true } do |f| %> 
    . 
    . 
    . 
    <label> 
     <%= f.check_box :remove_images %> 
     Remove images 
    </label> 
<% end %> 

..., die ich bin sicher, dass Sie gesehen haben. Natürlich würde das Aufrufen von remove_images! in Ihrem Fall nicht funktionieren, da dies eine einheitliche Aktion für alle Bilder impliziert.

Versuchen Sie, die folgende Modifikation der oben und sehen, ob es dieses Problem hilft sortieren und jedes Bild einzeln Ziel ...

<%= nested_form_for @product, :html=>{ :multipart => true } do |f| %> 
    . 
    . 
    . 
    <%= f.fields_for :images do |product_form| %> 

    <%= product_form.link_to_remove "Remove this image" %> 
    <% end %> 
<% end %> 

Um diese Arbeit zu machen stellen Sie sicher, gem 'nested_form', '~> 0.3.2' in Ihrem Gemfile aufzunehmen.

Hoffentlich hilft das Ihnen aus.

+0

gibt es nur ein Attribut, wo sollte das verschachtelte Formular verwendet werden? wenn Sie die Readme auf dem Master-Zweig lesen: https://github.com/carrierwaveuploader/carrierwave # multiple-Datei-Uploads ich einzelne Spalte havea die ein Array speichert. Ihre Lösung funktionieren würde, wenn ich ein separates Modell für die Bilder hatte, was ich nicht tun. ich am mount_multiple_spec zu suchen begann.rb von carrierwave und ich fange an zu denken, dass es jetzt so ist. – Cris

0

Hinzufügen von etwas wie dies zum Produktmodell macht den Trick.

Carrierwave kümmert sich auch um das Entfernen der Datei nach dem Speichern des Datensatzes.

1

Ich lerne von @Cris und verwende das folgende Code-Snippet bei der Arbeit mit S3.

def remove_image_at_index(index) 
    remain_images = @product.images # copy the array 
    deleted_image = remain_images.delete_at(index) # delete the target image 
    deleted_image.try(:remove!) # delete image from S3 
    @product.images = remain_images # re-assign back 
end 

Ich schrieb dies eine blog post über, und ein sample project mit konkreteren Codes erstellen.

Verwandte Themen