ファイルのアップロードには、carrierwave gem を使用しています。
ユーザーが画像に不適切なフラグを立て、管理者が画像を削除できるシステムを構築しました。私が知る限り、イメージに対して destroy を呼び出すと、テーブルからパス名が削除されるだけです。
キャリアウェーブに実際にファイル自体を削除させる方法はありますか? または、イメージ パスを破棄すると、Rails は自動的にファイルを削除する必要がありますか?
ファイルのアップロードには、carrierwave gem を使用しています。
ユーザーが画像に不適切なフラグを立て、管理者が画像を削除できるシステムを構築しました。私が知る限り、イメージに対して destroy を呼び出すと、テーブルからパス名が削除されるだけです。
キャリアウェーブに実際にファイル自体を削除させる方法はありますか? または、イメージ パスを破棄すると、Rails は自動的にファイルを削除する必要がありますか?
これに対して CarrierWave が提供するものはわかりませんがFileUtils
、Ruby 標準ライブラリで ActiveRecord コールバックを使用できます。
例えば、
require 'FileUtils'
before_destroy :remove_hard_image
def remove_hard_image
FileUtils.rm(path_to_image)
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