Comment faire pour que carrierwave supprime le fichier lors de la destruction d’un enregistrement?

J’utilise le joyau de carrierwave pour télécharger des fichiers.

J’ai construit un système pour que les utilisateurs puissent marquer les images comme inappropriées et que les administrateurs puissent supprimer les images. D’après ce que je peux dire, l’appel de destroy sur l’image ne supprimera que le nom du chemin de la table.

Existe-t-il un moyen pour que carrierwave supprime réellement le fichier lui-même? Ou les rails doivent-ils automatiquement supprimer le fichier lorsque je détruis le chemin de l’image?

Vous ne savez pas ce que CarrierWave propose pour cela, mais vous pouvez utiliser FileUtils dans la bibliothèque standard Ruby avec un rappel ActiveRecord.

Par exemple,

 require 'FileUtils' before_destroy :remove_hard_image def remove_hard_image FileUtils.rm(path_to_image) end 

Remarque: Ce code provient de la mémoire.

Comme @mu_is_too_short dit, vous pouvez utiliser File # delete .

Voici un extrait de code que vous pouvez utiliser comme aide avec un petit ajustement dans votre application rails.

 def remove_file(file) File.delete(file) end 

ou si vous avez juste le nom de fichier stocké dans le fichier

 def remove_file(file) File.delete("./path/to/#{file}") end 

Si l’on veut supprimer un fichier mais ne veut pas spécifier le nom de fichier complet, vous pouvez utiliser ce qui suit.

Peut également être utilisé pour supprimer de nombreux fichiers ou tous les fichiers d’un répertoire avec une extension spécifique …

 file = Rails.root.join("tmp", "foo*") 

ou

 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