Подтвердить что ты не робот

Carrierwave, создавая дублирующее приложение при дублировании его содержащей модели

Я хотел бы дублировать модель. Оригинальная модель содержит вложение через Carrierwave. В идеале для нового объекта модели будет создано новое вложение, то есть копия исходного изображения.

Я просмотрел документацию Carrierwave и искал эту проблему, но не нашел решения, которое создает новый дубликат исходного изображения. Это разумно? Возможно ли это?

4b9b3361

Ответ 1

Я не верю, что у Carrierwave есть этот вариант. Однако вы можете использовать метод * _remote_url =, чтобы установить новое изображение модели как дубликат первого.

Вот краткий пример

Скажем, у меня есть модель, у которой has_one: фото прикреплено к несущей. Я могу дублировать, модель, установить фотографию на предыдущую и сохранить ее. Пример:

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

Это позволит "скопировать" фотографию с первого объекта на вторую в качестве нового приложения с несущей.

Ответ 2

Попробуйте этот камень https://github.com/equivalent/copy_carrierwave_file, он обрабатывает как локальное хранилище, так и хранилище Fog

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

Ответ 3

В то время как copy_carrierwave_file - это аккуратный камень, он не нужен, если вы используете локальное хранилище.
carrierwave может использовать локальные файлы в качестве источника вложений, и вы можете использовать его для дублирования вложения:

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

Это более эффективно, чем маршрутизация изображения дважды через веб-сервер.

Ответ 4

Для меня с CarrierWave 0.10 это работает отлично:

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

Хотя я не уверен, как это получается при использовании облачного хранилища, такого как S3