特定のアップローダを設定して、関連するモデルオブジェクトが破棄されたときにamazon s3のファイルが削除されないようにしたいと考えています。ファイルの削除を中止したい
これは、アップロードされたモデルレコードが破棄されたにもかかわらず、2番目の監査テーブル内で引き続き参照されるためです。
私はfog、carrierwave、s3を使用しています。あなたは当たりアップロード基づいてこれを設定する場合は
特定のアップローダを設定して、関連するモデルオブジェクトが破棄されたときにamazon s3のファイルが削除されないようにしたいと考えています。ファイルの削除を中止したい
これは、アップロードされたモデルレコードが破棄されたにもかかわらず、2番目の監査テーブル内で引き続き参照されるためです。
私はfog、carrierwave、s3を使用しています。あなたは当たりアップロード基づいてこれを設定する場合は
まあ私の知る限り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
これは、そのファイルを保証しますが、それら
を破壊する前に洗浄されていますレコードがデータベースから削除されたときの処理
これを行う方が良いかどうかを知らせてください。
・ホープ、このヘルプ
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
実際にこれを行う方法があり、あなたはそれを削除し、コールバックをスキップする必要があります。
skip_callback :commit, :after, :remove_<column_name>!
例えば
# user.rb
mount_uploader :avatar
skip_callback :commit, :after, :remove_avatar!
https://github.com/carrierwaveuploader/carrierwave#skipping-activerecord-callbacks
それは動作します!ありがとう – joselo
を見ますありがとうございましたDave、残念ながら、私はすでにこれを持っていて、うまくいきませんでした。なぜそれが失敗するかもしれないかについてのあらゆる考え、私はアップローダーでそれを持っています。 – nodrog
@DaveNewton私はそれが動作するとは思わないそれは更新の場合にのみレコードを削除しないでください – Viren