如何在carrierwave上删除某些版本的图像?

时间:2016-09-10 10:09:04

标签: ruby-on-rails carrierwave

我使用了carrierwave。 最近我想出了如何使用recreate_versions重新创建其他视觉! 像这样的东西

Model.all.each do |model|
    model.image.recreate_versions!
end

但我意识到这种方法只是创建新版本,它不会删除以前版本的图像。

是否有删除版本不存在的图像的方法?

2 个答案:

答案 0 :(得分:0)

您可以使用回调:

我猜安装的对象是Image。所以你可以做到以下几点:

after_update :remove_prev_version

def remove_prev_version
  @model.remove_image
end

请注意,您需要在before而非after上进行操作,因为您希望删除旧图片。

答案 1 :(得分:0)

内部,CarrierWave使用方法remove_versions!,但它是私有的。
但是很容易实现:

Model.all.each do |model|
  model.image.versions.each { |name, v| v.remove! }
end

如果愿意,可以按名称(符号)过滤版本。

除非直接使用文件系统,否则无法删除没有(较长)相关版本的文件。