2013-06-25 12 views
9

特定のアップローダを設定して、関連するモデルオブジェクトが破棄されたときにamazon s3のファイルが削除されないようにしたいと考えています。ファイルの削除を中止したい

これは、アップロードされたモデルレコードが破棄されたにもかかわらず、2番目の監査テーブル内で引き続き参照されるためです。

私はfog、carrierwave、s3を使用しています。あなたは当たりアップロード基づいてこれを設定する場合は

答えて

9

まあ私の知る限りremove_previously_stored_files_after_updateのみ動作updatedのでfalseにそれをしません設定古いfileを削除します。update

しかし、あなたの場合には、ファイルを確認する必要があり、関連するモデルオブジェクトは、(あなたがコードhereを調べる場合)が考える

だけでなく、私はいけないを破壊するときにまだ存在しているCarrierwaveでは、現在入手可能なのいずれかのメカニズムがそうさ

こと

いますが、私はこれはattr_accessorを設定関与を推測同じことを達成するためにremove!を上書きすることができます(ファイルを維持するか、それを削除するかどうかを判断するためのフラグである)

ご希望のモデルインサイドattr_accessor(たとえばkeep_file)を定義

を削除し、希望のアップローダーでremove!方法

class MyUploader < CarrierWave::Uploader::Base 
    def remove! 
    unless model.keep_file 
     super 
    end 
    end 
end 

と(あなたが削除されたファイルを保存したい場合は)あなたがオブジェクトに対してattr_accessorを設定していることを確認例

u = User.find(10) 
u.keep_file = true 
u.destroy 

これは、そのファイルを保証しますが、それら

を破壊する前に洗浄されていますレコードがデータベースから削除されたときの処理

これを行う方が良いかどうかを知らせてください。

・ホープ、このヘルプ

7

Keeping files for all, or some uploaders

CarrierWave.configure do |config| 
    config.remove_previously_stored_files_after_update = false 
end 

:モデルオブジェクトがあるとき

class AvatarUploader < CarrierWave::Uploader::Base 
    configure do |config| 
    config.remove_previously_stored_files_after_update = false 
    end 

    ... 
end 
+0

を見ますありがとうございましたDave、残念ながら、私はすでにこれを持っていて、うまくいきませんでした。なぜそれが失敗するかもしれないかについてのあらゆる考え、私はアップローダーでそれを持っています。 – nodrog

+0

@DaveNewton私はそれが動作するとは思わないそれは更新の場合にのみレコードを削除しないでください – Viren

関連する問題