アップローダ ( ) で Carrierwave(fog) を使用して S3 にアップロードされたファイルを含むドキュメント モデルがありますmount_uploader :file, DocumentUploader
。また、「パラノイア」ジェムをacts_as_paranoid
使用してドキュメントをソフト削除しています。破棄時に、添付ファイルを同じディレクトリの「アーカイブ」フォルダーに移動したいと考えています。その後、削除されたドキュメントが復元されたら、元の (親) ディレクトリに戻す予定です。
私のモデルには次のものがあります。
skip_callback :commit, :after, :remove_file!
before_destroy :move_file_to_archive
after_restore :fetch_file_from_archive
メソッド内で、move_file_to_archive
fog を使用して amazon への接続を確立し、次の手順を実行してファイルをアーカイブに移動します。
bucket = connection.directories.get(bucket_name)
file = bucket.files.get(self.file.file.path)
new_path = file.key.split('/')[0..-2].join('/') + '/archive/' + file.key.split('/')[-1]
new_file = file.copy(bucket_name, new_path)
file.destroy
問題は、ドキュメント オブジェクトが古いファイルではなく新しい (アーカイブされた) ファイルを指すようにする方法が見つからないことです。どういうわけか、オブジェクトが破棄されているときに、self.file.path を元のパスではなくアーカイブされたパスに変更したいと考えています。そして、ドキュメントが復元されているときに元に戻します。どんな助けでも大歓迎です!