2017-02-23 53 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