Jak mogę zreorganizować istniejącą hierarchię folderów za pomocą CarrierWave?

Próbuję przenosić pliki wokół mojego wiadra S3 za pomocąCarrierWave zreorganizować strukturę folderów.

Doszedłem do istniejącej aplikacji Rails, w której wszystkie obrazy dla klasy są przesyłane do folderu o nazwie/uploads. Powoduje to problemy, gdy jeśli dwóch użytkowników przesyła różne obrazy o tej samej nazwie pliku, drugi obraz zastępuje pierwszy. Aby rozwiązać ten problem, chcę zreorganizować foldery, aby umieścić każdy obraz we własnym katalogu zgodnie zActiveRecord instancja obiektu. UżywamyCarrierWave zarządzać przesyłaniem plików.

Stary kod przesyłający miał następującą metodę:

def store_dir
  "uploads"
end

Zmodyfikowałem metodę, aby odzwierciedlić mój nowy schemat przechowywania plików:

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

To działa świetnie dla nowych obrazów, ale łamie URL dla starych obrazów. Istniejące obrazy zgłaszają swój adres URL, aby znajdowały się w nowym folderze natychmiast po zmianie modelu, podczas gdy pliki obrazów są nadal przechowywane/uploads.

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

To nie jest poprawne. Ten obiekt powinien zgłosić swoje logo/uploads.

Moim rozwiązaniem jest napisanie skryptu, aby przenieść pliki obrazów, ale nie znalazłem poprawnych metod w CarrierWave do przenoszenia plików. Mój skrypt wyglądałby mniej więcej tak:

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 

Co powinienem zrobić w trzeciej linii mojego skryptu, aby przenieść plik do nowej lokalizacji?

questionAnswers(1)

yourAnswerToTheQuestion