How to make carrierwave delete the file when destroying a record?

后端 未结 3 1841
隐瞒了意图╮
隐瞒了意图╮ 2020-12-15 02:16

I\'m using the carrierwave gem to upload files.

I have built a system for users to flag images as inappropriate and for admins to remove the images. From what I can

相关标签:
3条回答
  • 2020-12-15 03:02

    Not sure what CarrierWave offers for this, but you could use FileUtils in the Ruby standard library with an ActiveRecord callback.

    For instance,

    require 'FileUtils'
    before_destroy :remove_hard_image
    
    def remove_hard_image
      FileUtils.rm(path_to_image)
    end
    

    Sidenote: This code is from memory.

    0 讨论(0)
  • 2020-12-15 03:15

    If one wants to delete a file but does not want to specify the full filename you can use the below.

    Can also be used to delete many files or all files in a directory with a specific extension...

    file = Rails.root.join("tmp", "foo*") 
    

    or

    file = Rails.root.join("tmp", ".pdf")  
    

    files = Dir.glob(file) #will build an array of the full filepath & filename(s)
    files.each do |f|
      File.delete(f)
    end
    
    0 讨论(0)
  • 2020-12-15 03:18

    Like @mu_is_too_short said, you can use File#delete.

    Here's a code snippet you could use as a helper with a little tweaking in your rails app.

    def remove_file(file)
      File.delete(file)
    end
    

    or if you just have the filename stored in file

    def remove_file(file)
      File.delete("./path/to/#{file}")
    end
    
    0 讨论(0)
提交回复
热议问题