ruby-on-rails - mount_uploader - ruby carrierwave
¿Cómo hacer que carrierwave elimine el archivo al destruir un registro? (3)
Como dijo @mu_is_too_short, puede usar File#delete .
Aquí hay un fragmento de código que puede usar como ayudante con un pequeño ajuste en su aplicación de rieles.
def remove_file(file)
File.delete(file)
end
o si solo tienes el nombre de archivo almacenado en el archivo
def remove_file(file)
File.delete("./path/to/#{file}")
end
Estoy usando la gema carrierwave para subir archivos.
Creé un sistema para que los usuarios marquen las imágenes como inapropiadas y para que los administradores eliminen las imágenes. Por lo que puedo decir, llamar a destruir en la imagen solo eliminará el nombre de ruta de la tabla.
¿Hay alguna manera de que carrierwave elimine realmente el archivo? ¿O deberían los rieles eliminar automáticamente el archivo cuando destruyo la ruta de la imagen?
Si uno quiere eliminar un archivo pero no desea especificar el nombre completo, puede usar el siguiente.
También se puede usar para eliminar muchos archivos o todos los archivos en un directorio con una extensión específica ...
file = Rails.root.join("tmp", "foo*")
o
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
No estoy seguro de qué ofrece CarrierWave para esto, pero podría usar FileUtils
en la biblioteca estándar de Ruby con una devolución de llamada de ActiveRecord.
Por ejemplo,
require ''FileUtils''
before_destroy :remove_hard_image
def remove_hard_image
FileUtils.rm(path_to_image)
end
Sidenote: Este código es de memoria.