Как я могу реорганизовать существующую иерархию папок с 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
Что я должен сделать в третьей строке моего скрипта, чтобы переместить файл в новое место?