Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 5 CarrierWave, can't remove last file in a multiple upload

Following this How-to:

https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Add-more-files-and-remove-single-file-when-using-default-multiple-file-uploads-feature

class ImagesController < ApplicationController
  before_action :set_gallery

  def create
    add_more_images(images_params[:images])
    flash[:error] = "Failed uploading images" unless @gallery.save
    redirect_to :back
  end

  def destroy
    remove_image_at_index(params[:id].to_i)
    flash[:error] = "Failed deleting image" unless @gallery.save
    redirect_to :back
  end

  private

  def set_gallery
    @gallery = Gallery.find(params[:gallery_id])
  end

  def add_more_images(new_images)
    images = @gallery.images 
    images += new_images
    @gallery.images = images
  end

  def remove_image_at_index(index)
    remain_images = @gallery.images # copy the array
    deleted_image = remain_images.delete_at(index) # delete the target image
    deleted_image.try(:remove!) # delete image from S3
    @gallery.images = remain_images # re-assign back
  end

  def images_params
    params.require(:gallery).permit({images: []}) # allow nested params as array
  end
end

I seem to not be able to correctly remove the very last file. In my printed file list it keeps on standing there. Oddly enough with 0kb.

Then when I load up new files this one does go away.

like image 891
Code-MonKy Avatar asked Jan 24 '26 06:01

Code-MonKy


1 Answers

I had the same problem and I found that you have to call 'remove_images!' if this was the last one. In 'remove_image_at_index' function add:

@gallery.remove_images! if remain_images.empty?

Regards

like image 124
Michal Lonski Avatar answered Jan 26 '26 22:01

Michal Lonski



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!