Пустые папки при удалении файла с помощью CarrierWave - PullRequest
4 голосов
/ 03 ноября 2011

Когда я удаляю загруженный файл с помощью CarrierWave и Mongoid, он удаляет файл, но оставляет пустые папки.

/files/:user_id/images/:file_id/ ['image.png', 'content_image.png', 'thumb_image.png']

Я хочу, чтобы папка :file_id также удалялась при удалении файла.Есть ли способ сделать это?

Ответы [ 3 ]

4 голосов
/ 24 апреля 2012

Вы можете запустить ежедневное задание cron, чтобы уничтожить каталоги:

cd /your/uploads/dir && find . -type d -empty -exec rmdir {} \;
4 голосов
/ 04 января 2014

Вы также можете сделать так:

after_destroy :remove_file_directory


 def remove_file_directory
    path = File.expand_path(mount.store_path, mount.root)
    FileUtils.remove_dir(path, force: false)
 end

Где mount - это то, что вы установили - как Например: если у вас mount_uploader :avatar, AvatarUploader, то

 def remove_file_directory
    path = File.expand_path(avatar.store_path, avatar.root)
    FileUtils.remove_dir(path, force: false)
 end
4 голосов
/ 08 января 2012

Я решил это с помощью этого:

  before_destroy :remember_id
  after_destroy :remove_id_directory

  protected

  def remember_id
    @id = id
  end

  def remove_id_directory
    FileUtils.remove_dir("#{Rails.root}/path/to/folder/#{@id}", :force => true)
  end
...