Как заставить carrierwave удалить файл при уничтожении записи?



Я использую carrierwave gem для загрузки файлов.



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



есть ли способ, чтобы carrierwave на самом деле удалить сам файл? Или rails автоматически удалит файл, когда я уничтожу путь к изображению?

601   3  

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

    Ничего не найдено.