Как я могу реорганизовать существующую иерархию папок с CarrierWave?

Я пытаюсь переместить файлы вокруг моей корзины S3, используяCarrierWave реорганизовать структуру папок.

Я пришел в существующее приложение Rails, где все изображения для класса загружаются в папку с именем/uploads, Это вызывает проблемы, когда два пользователя загружают разные изображения с одинаковым именем файла, второе изображение перезаписывает первое. Чтобы решить эту проблему, я хочу реорганизовать папки для размещения каждого изображения в отдельном каталоге в соответствии сActiveRecord экземпляр объекта. Мы используемCarrierWave управлять загрузкой файлов.

Старый код загрузчика имел следующий метод:

def store_dir
  "uploads"
end

Я изменил метод, чтобы отразить мою новую схему хранения файлов:

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

Это прекрасно работает для новых изображений, но нарушает URL для старых изображений. Существующие изображения сообщают, что их URL-адрес находится внутри новой папки сразу же после изменения модели, в то время как файлы изображений все еще хранятся в./uploads

> object.logo.store_dir
=> "uploads/object/logo/133"

Это не правильно. Этот объект должен сообщить свой логотип в./uploads

Мое решение - написать скрипт для перемещения файлов изображений, но у меня нетt нашел правильные методы в CarrierWave для перемещения файлов. Мой сценарий будет выглядеть примерно так:

MyClass.all.each |image|
  filename = file.name #This method exists in my uploader, returns the file name
  #Move the file from "/uploads" to "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end 

Что я должен сделать в третьей строке моего скрипта, чтобы переместить файл в новое место?

Ответы на вопрос(1)

Ваш ответ на вопрос