【问题标题】:How do I delete images of some versions on carrierwave?如何删除carrierwave上某些版本的图像?
【发布时间】:2017-01-18 09:30:47
【问题描述】:

我使用载波。 最近我想出了如何使用 recreate_versions 重新创建其他愿景! 像这样的

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

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

有没有删除版本不存在的图片的方法?

【问题讨论】:

    标签: ruby-on-rails carrierwave


    【解决方案1】:

    您可以为此使用回调:

    我猜挂载的对象是 Image。因此您可以执行以下操作:

    after_update :remove_prev_version
    
    def remove_prev_version
      @model.remove_image
    end
    

    请注意,您需要在 before 而不是 after 上执行此操作,因为您希望删除旧图像。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-12-16
        • 1970-01-01
        • 2015-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-18
        • 2013-01-19
        • 2020-04-08
        相关资源
        最近更新 更多