У меня есть модель документа с файлом, который загружается на S3 с помощью Carrierwave (туман) с моим загрузчиком (mount_uploader :file, DocumentUploader
). Я также использую «paranoia» gem's acts_as_paranoid
для мягкого удаления документов. После уничтожения я хочу переместить прикрепленный файл в папку «архив» в том же каталоге. Затем я планирую переместить его обратно в исходный (родительский) каталог, когда удаленный документ будет восстановлен.Обновить путь к файлу в carrerwave S3
У меня есть следующие в моей модели:
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 изменился на заархивированный путь вместо исходного пути. Затем верните его, когда документ будет восстановлен. Любая помощь будет оценена!