2011-12-28 22 views
6

Come si rinomina le immagini esistenti con CarrierWave? (Questa domanda è vicina ma non proprio la stessa: Renaming uploaded files with Carrierwave) Ad esempio, se model.image.url è foo-bar-jpg, come è possibile rinominare sia il file che il campo del database corrispondente su foo-bar.jpg?Rinominare i file CarrierWave esistenti

model.image.recreate_versions! creerà nuovi file ma nel database non cambierà il campo dell'immagine del modello.

risposta

1

ho usato la tecnica descritta qui: How to assign a remote file to Carrierwave?

questo potrebbe non essere il modo migliore per andare, Ma ha funzionato per me. Il mio file remoto è semplicemente il vecchio nome/percorso del file.

In primo luogo, ho cambiato l'uploader Carrierwave per avere il nuovo stile del nome di file che volevo. Poi ho scritto un compito rastrello per scorrere tra i record e aggiornare i file in questo modo:

model.remote_image_url = old_image_url 
model.save! 

verrà quindi caricato il file esistente ancora una volta, l'impostazione del nome/percorso in base alla tua aggiornato Uploader (e ricreare tutte le versioni). Non ho ancora affrontato il problema della pulizia dei vecchi file, non sono sicuro di come funzionerà se il tuo store_dir è lo stesso (anche il mio è cambiato).

Assicurati di eseguire un test completo su alcuni record prima di passare attraverso il tavolo completo, è facile fare un casino di cose. Tieni presente che la modifica del tuo store_dir interromperà tutte le tue ricerche di file esistenti.

2

La locomotive branch di Carrierwave sembra avere il supporto Rinomina - il file specifico è here.

C'è file rename support nella principale quando si converte i tipi di file, ma nessun supporto rename:

"This should help with situations where a file has multiple versions, 
and at least one of the versions is of a different format than the master version." 
0

Abbiamo trovato questo, sembra obsoleto, ma forse aiuta qualcuno: https://github.com/stvkoch/carrierwave_single_store