0

我有一个 Document 模型,其中包含一个文件,该文件使用 Carrierwave(fog) 和我的上传器 ( mount_uploader :file, DocumentUploader) 上传到 S3。我还使用“偏执狂”宝石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中,我使用雾建立与亚马逊的连接,并执行以下操作以将文件移动到存档:

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设置要包含的路径/archive/,以防文档在偏执狂的deleted_at字段中存在值。如果文档当前处于已删除状态,那么这样做会使carrierwave 查看存档路径。

于 2016-02-04T18:17:57.637 回答