ActiveStorage - Select 个要删除的图像

ActiveStorage - Select Images to Delete

我有一个表单,用户可以在其中查看上传的图片,也可以一次删除一张。但我想要的是在每个图像旁边都有复选框,这样用户就可以 select 他想要删除的图像,然后按一个按钮将它们删除。

现在这是我拥有的:

_form.html.erb

<% if @vehicle.images.attached? %>
  <% @vehicle.images.each do |img| %>
    <div class="box_image">
      <div class="box_content">
        <%= image_tag img %>
        <div class="overlay">
          <%= link_to delete_upload_vehicle_url(@vehicle, img.id), method: :delete, data: { confirm_swal: 'Tem a certeza que quer eliminar esta imagem?' }, class:"delete_image" do %>
            <i class="fa fa-times"></i>
          <% end %>
        </div>
      </div>
    </div>
  <% end %>
<% end %>

vehicles_controller.rb

def delete_upload
  attachment = ActiveStorage::Attachment.find(params[:upload_id])
  attachment.purge
  redirect_back(fallback_location: vehicles_path)
end

routes.rb

resources :vehicles do
  member do
    delete "delete_upload/:upload_id", action: :delete_upload, as: :delete_upload
  end
end

图片

我怎样才能完成我想要的?如果有人能给我一个例子,我将不胜感激:)

在您看来,您需要为每张图片定义一个复选框,该复选框可以通过单击按钮提交的表单进行选择

<%= form_tag destroy_multiple_images_path, method: :delete do %>
<% if @vehicle.images.attached? %>
  <% @vehicle.images.each do |img| %>
    <div class="box_image">
      <div class="box_content">
        <%= image_tag img %>
        <%= check_box_tag "deleted_img_ids[]", img.id %>
      </div>
    </div>
  <% end %>
<% end %>
<%= submit_tag "Delete selected" %>
<% end %>

在您的控制器中,您可以执行以下操作:

vehicles_controller.rb:

def destroy_multiple
  attachments = ActiveStorage::Attachment.where(id: params[:deleted_img_ids])
  attachments.map(&:purge)
end

有任何疑问欢迎提问

我最终以不同的方式做事,但非常感谢@Sandepp Garg 帮助我实现了目标。

因为 rails 不支持另一个表单中的表单,所以我无法使用 Sandepp 的答案。我使用我的更新操作来删除图像。我不知道这是否是最好的方法,但我就是这样做的。

#controller
def update
  attachments = ActiveStorage::Attachment.where(id: params[:deleted_img_ids])
  attachments.map(&:purge)

  if @vehicle.update(vehicle_params)
    redirect_to @vehicle
  else
    render 'edit'
  end
end
<!-- view -->
<div class="box_image">
   <div class="box_content">
      <%= image_tag img %>
      <%= check_box_tag "deleted_img_ids[]", img.id %>
   </div>
</div>

如果我确实做错了什么,请告诉我。谢谢:)