Я использую камкордер-носитель для загрузки файлов. Я создал систему для пользователей, чтобы помечать изображения как неприемлемые, а администраторы - для удаления изображений. Из того, что я могу сказать, при вызове destroy на изображении будет удалено только имя пути из таблицы. Есть ли способ, чтобы ruby фактически удалил сам файл? Или должны ли рельсы автоматически удалять файл, когда я уничтожаю путь изображения?
Удаление файлов в рубине
Ответ 1
Не уверен, что CarrierWave предлагает для этого, но вы можете использовать FileUtils
в стандартной библиотеке Ruby с обратным вызовом ActiveRecord.
Например,
require 'FileUtils'
before_destroy :remove_hard_image
def remove_hard_image
FileUtils.rm(path_to_image)
end
Sidenote: этот код из памяти.
Ответ 2
Как и @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
Ответ 3
Если вы хотите удалить файл, но не хотите указывать полное имя файла, вы можете использовать ниже.
Может также использоваться для удаления многих файлов или всех файлов в каталоге с определенным расширением...
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