2017-02-23 57 views
4

我創建了一個使用carrierwave上傳圖像的示例rails應用程序。我可以上傳多張圖片。但是現在,當我想刪除它們時,我只是忙於搜索解決方案。我在文檔中讀到我們可以使用@user.remove_avatar!來刪除單個圖像。但如何刪除多個圖像?刪除carrierwave的多個圖像

任何幫助將不勝感激。 在此先感謝。 :)

+1

顯示像模型關聯您的一些代碼 –

+0

@AniketShivamTiwari謝謝您考慮我的問題。但我並不是將它保存在一些不同的模型中。它在一個模型中被存儲爲json。我跟隨[this](https://github.com/carrierwaveuploader/carrierwave#multiple-file-uploads)進行多個圖片上傳。 – Vishal

回答

1

這並不覺得最Rails做事的方式,但我有這種方法(我從其他地方的建議代碼修改)。

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 

在我看來,我輸出我的圖像(i爲圖像位置):

<%= 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 %> 

而且在路線

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

這消除了單個圖像,你有多個圖像。

0

我同意樓上的答案,但是當圖像只剩下一個文件時,上面的方法是無效的。我通過以下方式解決了這個問題。(我做了它的型號。)

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

如果你需要上傳多個文件,我建議你創建一個模型直接存儲文件,因爲它更靈活。 – YaEvan