Подтвердить что ты не робот

Удаление файлов в рубине

Я использую камкордер-носитель для загрузки файлов. Я создал систему для пользователей, чтобы помечать изображения как неприемлемые, а администраторы - для удаления изображений. Из того, что я могу сказать, при вызове destroy на изображении будет удалено только имя пути из таблицы. Есть ли способ, чтобы ruby ​​фактически удалил сам файл? Или должны ли рельсы автоматически удалять файл, когда я уничтожаю путь изображения?

4b9b3361

Ответ 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