如何在销毁记录时使carrierwave删除文件?

时间:2011-07-01 21:26:36

标签: ruby-on-rails ruby carrierwave

我正在使用carrierwave gem上传文件。

我已经构建了一个系统,供用户将图像标记为不合适,以及管理员删除图像。据我所知,在图像上调用destroy只会从表中删除路径名。

有没有办法让carrierwave实际删除文件本身?或者当我销毁图像路径时,rails会自动删除文件吗?

3 个答案:

答案 0 :(得分:101)

与@mu_is_too_short一样,您可以使用 File#delete

这是一个代码片段,您可以将其用作帮助器,并在rails应用程序中进行一些调整。

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

或者您只是将文件名存储在文件

def remove_file(file)
  File.delete("./path/to/#{file}")
end

答案 1 :(得分:62)

不确定CarrierWave为此提供了什么,但您可以在Ruby标准库中使用带有ActiveRecord回调的FileUtils

例如,

require 'FileUtils'
before_destroy :remove_hard_image

def remove_hard_image
  FileUtils.rm(path_to_image)
end

旁注:此代码来自内存。

答案 2 :(得分:1)

如果要删除文件但不想指定完整文件名,可以使用以下内容。

还可用于删除具有特定扩展名的目录中的许多文件或所有文件...

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

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