更新carrerwave S3中的文件路径

Update path of file in carrerwave S3

我有一个带有文件的文档模型,该文件通过我的上传器 (mount_uploader :file, DocumentUploader) 使用 Carrierwave(fog) 上传到 S3。我也在使用 'paranoia' gem 的 acts_as_paranoid 软删除文件。销毁后,我希望将附件移动到同一目录中的 'archive' 文件夹中。然后我计划在恢复已删除的文档时将其移回原始(父)目录。

我的模型中有以下内容:

skip_callback :commit, :after, :remove_file!
before_destroy :move_file_to_archive
after_restore :fetch_file_from_archive

并且在方法 move_file_to_archive 中,我使用 fog 建立了到亚马逊的连接并执行以下操作以将文件移动到存档:

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 更改为存档路径而不是原始路径。然后在恢复文档时还原它。如有任何帮助,我们将不胜感激!

让它自己工作。我在我的 DocumentUploader 中添加了一个条件,以设置包含 /archive/ 的路径,以防文档在偏执狂的 deleted_at 字段中存在值。如果文档当前处于删除状态,只是这样做会使 carrierwave 查看存档路径。