0

アップローダ ( ) で 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_archivefog を使用して 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 を元のパスではなくアーカイブされたパスに変更したいと考えています。そして、ドキュメントが復元されているときに元に戻します。どんな助けでも大歓迎です!

4

1 に答える 1

1

自分で動作するようになりました。ドキュメントのパラノイアのフィールドに値が存在する場合に備えDocumentUploaderてパスを設定する条件を追加しました。これを行うだけで、ドキュメントが現在削除された状態にある場合、carrierwave はアーカイブ パスを調べます。/archive/deleted_at

于 2016-02-04T18:17:57.637 に答える