Как заставить carrierwave удалить файл при уничтожении записи?
Я использую carrierwave gem для загрузки файлов.
Я построил систему для пользователей, чтобы помечать изображения как неуместные и для администраторов, чтобы удалить изображения. Из того, что я могу сказать, вызов destroy на изображении только удалит имя пути из таблицы.
есть ли способ, чтобы carrierwave на самом деле удалить сам файл? Или rails автоматически удалит файл, когда я уничтожу путь к изображению?
3 ответов:
Не уверен, что CarrierWave предлагает для этого, но вы могли бы использовать
FileUtilsв стандартной библиотеке Ruby с обратным вызовом ActiveRecord.например,
require 'FileUtils' before_destroy :remove_hard_image def remove_hard_image FileUtils.rm(path_to_image) endПримечание: этот код из памяти.
Как сказал @mu_is_too_short, вы можете использовать File#delete.
вот фрагмент кода, который вы можете использовать в качестве помощника с небольшой настройкой в вашем приложении rails.
def remove_file(file) File.delete(file) endили если у вас просто есть имя файла, хранящееся в file
def remove_file(file) File.delete("./path/to/#{file}") 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
Comments