CarrierWave - 仅删除版本,而不是原始版本

时间:2014-05-19 21:31:31

标签: ruby-on-rails carrierwave

是否可以仅删除版本并保留原始文件?

上传图像会创建原始文件和:product_thumb版本(Works)。

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick
  storage :fog # Amazon S3

  version :product_thumb, if: :create_thumb? do
      process :resize_to_fit => [15, 15]
  end

  protected


  def create_thumb?
      model.make_thumbnail 
  end

end

当我跑步时:

prod = Product.first
prod.remove_image!
prod.save

原始和:product_thumb都会被删除。但我只想删除版本:product_thumb。我查看了API并没有看到任何有用的内容。

我一直试图让它在控制台中运行。

prod.remove_product_thumb_image!   --> # NoMethodError: undefined method
prod.remove_image(:product_thumb)  --> # ArgumentError: wrong number of arguments (1for0)

# one idea was to get the file path of the version and delete it manually
prod.image.url(:product_thumb)    --> # path/to/file/product_thumb_test.png

有没有办法通过CarrierWave删除版本?

2 个答案:

答案 0 :(得分:0)

要删除所有版本,请使用:

prod.image.remove_versions!

要删除特定版本,请使用:

prod.image.versions[:product_thumb].remove!

答案 1 :(得分:-1)

据我所知,删除图像版本没有简短的命令。但是,您可以构建一个可以为您执行此操作的Ruby脚本,即删除相应的文件。

步骤1:删除图像文件

使用这样的脚本:

Product.all.each do |p|
  path = File.delete(p.image.product_thumb.current_path)
  File.delete(path) if File.exists?(path.to_s)
end

步骤2:删除映像版本

从ImageUploader中删除product_thumb版本。

完成!

就像从未有过图像版本一样。