【问题标题】:Removing multiple images of carrierwave去除载波的多个图像
【发布时间】:2023-04-02 02:32:01
【问题描述】:

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

【问题讨论】:

  • 显示你的一些代码,比如模型关联
  • @AniketShivamTiwari 感谢您考虑我的问题。但我没有将它保存在一些不同的模型中。它以 json 格式存储在一个模型中。我关注this进行多张图片上传。

标签: ruby-on-rails carrierwave


【解决方案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

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

【讨论】:

    【解决方案2】:

    同意楼上的回答,但是当图片只剩下一个文件时,上述方法无效。我通过以下方式解决了这个问题。(我是在模型下完成的。)

    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)
    

    【讨论】:

    • 如果你需要上传多个文件,我建议你创建一个直接存储文件的模型,因为它更灵活。
    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 2013-03-30
    相关资源
    最近更新 更多