2016-02-04 1 views
0

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

ответ

1

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