我创建了一个使用carrierwave上传图像的示例rails应用程序。我可以上传多张图片。但是现在,当我想删除它们时,我只是忙于搜索解决方案。我在文档中读到我们可以使用@user.remove_avatar!
来删除单个图像。但如何删除多个图像?删除carrierwave的多个图像
任何帮助将不胜感激。 在此先感谢。 :)
我创建了一个使用carrierwave上传图像的示例rails应用程序。我可以上传多张图片。但是现在,当我想删除它们时,我只是忙于搜索解决方案。我在文档中读到我们可以使用@user.remove_avatar!
来删除单个图像。但如何删除多个图像?删除carrierwave的多个图像
任何帮助将不胜感激。 在此先感谢。 :)
这并不觉得最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
这消除了单个图像,你有多个图像。
我同意楼上的答案,但是当图像只剩下一个文件时,上面的方法是无效的。我通过以下方式解决了这个问题。(我做了它的型号。)
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)
如果你需要上传多个文件,我建议你创建一个模型直接存储文件,因为它更灵活。 – YaEvan
显示像模型关联您的一些代码 –
@AniketShivamTiwari谢谢您考虑我的问题。但我并不是将它保存在一些不同的模型中。它在一个模型中被存储为json。我跟随[this](https://github.com/carrierwaveuploader/carrierwave#multiple-file-uploads)进行多个图片上传。 – Vishal