2017-02-23 4 views
4

Ich habe eine Beispiel-Schienen-App erstellt, die carrierwave zum Hochladen von Bildern verwendet. Ich kann mehrere Bilder hochladen. Aber jetzt, wenn ich sie löschen möchte, bin ich gerade mit der Suche nach der Lösung beschäftigt gewesen. Ich lese in der Dokumentation, dass wir @user.remove_avatar! verwenden können, um einzelnes Bild zu löschen. Aber wie lösche ich mehrere Bilder?Mehrere Bilder von carrierwave entfernen

Jede Hilfe wird geschätzt. Vielen Dank im Voraus. :)

+1

zeigen Ihnen einige Codes wie Modell Assoziationen –

+0

@AniketShivamTiwari Dank für meine Frage unter Berücksichtigung. Aber ich spare es nicht in einem anderen Modell. Es wird als json in einem Modell gespeichert. Ich folgte [this] (https://github.com/carrierwaveuploader/carrierwave#multiple-file-uploads) für den Upload mehrerer Bilder. – Vishal

Antwort

1

Dies fühlt sich nicht die meisten Rails Art und Weise Dinge zu tun, aber ich habe diese Methode (die ich von vorgeschlagen Code an anderer Stelle geändert).

def delete_picture 
    @i = params[:i].to_i 

    remain_images = @project.avatars # copy initial avatars 
    delete_image = remain_images.delete_at(@i) # delete the target image 
    delete_image.try(:remove!) # delete image 
    @project.avatars = remain_images # re-assign back 
    @project.save 
end 

Meiner Ansicht nach, wo ich geben die Bilder, die ich habe (wobei i die Bildposition):

<%= link_to delete_picture_project_path(i: i), method: :delete, confirm: 'Delete?',  dataType: 'script', 'data-message' => 'Are you sure?', 'data-severity' => 'danger', :remote => true do %> 
      <%= image_tag('delete') %> 
     <% end %> 

Und in Routen

resources :projects do 
member do 
    delete 'delete_picture', to: "projects#delete_picture" 
    end 
end 

Dieses ein einzelnes Bild entfernt, wo Sie habe mehrere Bilder.

0

Ich stimme der Antwort oben zu, aber wenn das Bild nur mit einer Datei übrig ist, ist die obige Methode nicht effektiv. Ich löste das Problem in der folgenden Art und Weise. (Ich habe es unter Modell.)

def delete_picture(index) 
    remain_pictures = self.pictures 
    if remain_pictures.size != 1 
    delete_picture = remain_pictures.delete_at(index) 
    delete_picture.remove! 
    self.pictures = remain_pictures 
    else 
    remove_reports! 
    end 
    save 
end 

@user.delete_picture(params[:index].to_i) 
+0

Wenn Sie mehr als eine Datei hochladen müssen, sollten Sie ein Modell erstellen, das die Datei direkt speichert, da sie flexibler ist. – YaEvan

Verwandte Themen