Путь обновления файла в 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
поле. Если это сделать, то оператор перевозчика увидит путь к архиву, если документ в данный момент находится в удаленном состоянии.