删除carrierwave的多个图像

时间:2017-02-23 06:03:15

标签: ruby-on-rails carrierwave

我创建了一个使用Carrierwave上传图像的示例Rails应用程序。我可以上传多张图片。但是现在当我想删除它们时,我只是忙着寻找解决方案。我在文档中读到我们可以使用@user.remove_avatar!删除单个图像。但是如何删除多个图像?

2 个答案:

答案 0 :(得分: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

在我看来我输出的图像(我是图像位置):

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

这将删除您有多个图像的单个图像。

答案 1 :(得分: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)