我正在使用carrierwave gem上传文件。
我已经构建了一个系统,供用户将图像标记为不合适,以及管理员删除图像。据我所知,在图像上调用destroy只会从表中删除路径名。
有没有办法让carrierwave实际删除文件本身?或者当我销毁图像路径时,rails会自动删除文件吗?
答案 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