tutorial rails multiple images files aws ruby-on-rails ruby-on-rails-3 carrierwave

ruby-on-rails - rails - ruby carrierwave tutorial



Carrierwave, creando un archivo adjunto duplicado al duplicar su modelo que contiene (4)

No creo que Carrierwave tenga esta opción. Sin embargo, puede hacer uso del método * _remote_url = para establecer que la imagen del nuevo modelo sea un duplicado del primero.

Aquí hay un breve ejemplo

Digamos que tengo un modelo que has_one: foto adjunta con carrierwave. Puedo duplicar, el modelo, configurar la foto a la anterior y guardarla. Ejemplo:

first_model = User.first duplicate_model = first_model.dup #(where the dup code duplicates everything else you need) duplicate_model.remote_photo_url = first_model.photo_url duplicate_model.save

Esto "copiaría" la foto del primer objeto en su segundo como nuevo adjunto de carrierwave.

Me gustaría duplicar un modelo. El modelo original contiene un archivo adjunto a través de Carrierwave. Idealmente, se crearía un nuevo archivo adjunto, que es una copia de la imagen original, para el nuevo objeto modelo.

He revisado la documentación de Carrierwave y he buscado en Google este problema, pero no he encontrado una solución que cree un nuevo duplicado de la imagen original. ¿Es esto razonable? ¿Posible?


Para mí con CarrierWave 0.10 esto funciona bien:

user = User.first dup_user = user.dup dup_user.photo = user.photo dup_user.save

Aunque no estoy seguro de cómo funciona esto cuando se usa el almacenamiento en la nube como S3


Prueba esta gema https://github.com/equivalent/copy_carrierwave_file , que maneja tanto el almacenamiento local como el almacenamiento mediante niebla.

original_resource = User.last new_resource = User.new CopyCarrierwaveFile::CopyFileService.new(original_resource, new_resource, :avatar).set_file new_resource.save nev_resource.avatar.url # https://...image.jpg


Si bien copy_carrierwave_file es una gema limpia, no es necesario siempre y cuando use el almacenamiento local.
carrierwave puede usar archivos locales como fuente de archivos adjuntos y puede usar esto para duplicar el archivo adjunto:

first_user = User.first duplicate_user = first_user.dup duplicate_user.photo = File.open(first_user.photo.file.file) if first_user.photo.present? duplicate_user.save

Esto es más eficiente que enrutar la imagen dos veces a través de su servidor web.