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