Путь обновления файла в carrerwave S3

У меня есть модель документа с файлом, который загружен на S3 с помощью Carrierwave(туман) с моим загрузчиком (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Я устанавливаю соединение с Amazon с помощью 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 изменился на архивный путь вместо исходного пути. И затем верните его, когда документ восстанавливается. Любая помощь будет оценена!

1 ответ

Решение

Получил это, чтобы работать сам. Я добавил условие к своему DocumentUploader установить путь для содержания /archive/ в случае, если документ имел значение в паранойе deleted_at поле. Если это сделать, то оператор перевозчика увидит путь к архиву, если документ в данный момент находится в удаленном состоянии.

Другие вопросы по тегам