Carrierwave,在复制其包含的模型时创建重复的附件

era*_*cus 25 ruby-on-rails ruby-on-rails-3 carrierwave

我想复制一个模型.原始模型包含通过Carrierwave的附件.理想情况下,将为新模型对象创建新附件,即原始图像的副本.

我查看了Carrierwave文档,并搜索了这个问题,但没有找到创建原始图像的新副本的解决方案.这合理吗?可能?

der*_*yau 30

我不相信Carrierwave有这个选择.但是,您可以使用*_remote_url =方法将新模型的图片设置为第一个的副本.

这是一个简短的例子

假设我有一个模型has_one:照片附载了carrierwave.我可以复制模型,将照片设置为上一张并保存.例:

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
Run Code Online (Sandbox Code Playgroud)

然后,这将把照片从第一个对象"复制"到第二个对象中作为新的载波附件.


Mar*_*n M 6

虽然它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
Run Code Online (Sandbox Code Playgroud)

这比通过Web服务器两次路由图像更有效.


equ*_*nt8 5

试试这个宝石https://github.com/equivalent/copy_carrierwave_file,它处理本地存储和雾存储

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
Run Code Online (Sandbox Code Playgroud)