我正在使用carrierwave gem 上传文件。
我建立了一个系统,供用户将图像标记为不合适的图像,并让管理员删除图像。据我所知,在图像上调用 destroy 只会从表中删除路径名。
有没有办法让carrierwave实际删除文件本身?或者当我销毁图像路径时,rails 是否应该自动删除文件?
我正在使用carrierwave gem 上传文件。
我建立了一个系统,供用户将图像标记为不合适的图像,并让管理员删除图像。据我所知,在图像上调用 destroy 只会从表中删除路径名。
有没有办法让carrierwave实际删除文件本身?或者当我销毁图像路径时,rails 是否应该自动删除文件?
就像@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
不确定 CarrierWave 对此提供了什么,但您可以FileUtils
在 Ruby 标准库中使用 ActiveRecord 回调。
例如,
require 'FileUtils'
before_destroy :remove_hard_image
def remove_hard_image
FileUtils.rm(path_to_image)
end
旁注:此代码来自内存。
如果想删除文件但不想指定完整的文件名,您可以使用以下内容。
也可用于删除具有特定扩展名的目录中的许多文件或所有文件...
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