我可以使用CarrierWave重新创建_versions原始文件吗?

时间:2015-08-06 06:38:07

标签: ruby-on-rails carrierwave

我正在使用railswave中的载波进行ImageUpload。

由于文件大小,我想调整原始图像文件的大小。

所以我删除版本:拇指块位置处理代码不在下面的版本块中。

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  ..
  #version :thumb do
  #  process :resize_to_limit => [1024, nil]
  #end

  process :resize_to_limit => [1024, nil] # added not in version block
  ..
end

问题是我不知道如何重新创建原始图像文件并使用CarrierWave上传。

.recreate_versions!方法只适用于我想的版本块..

#mounted uploader above
model.list_image.recreate_versions!
# => [:store_versions!]
# original file not change

如何重新创建原始文件?

(我不想添加版本块,因为如果添加版本块,那么无论何时上传图像文件,图像文件都是多个文件。(原始文件和特定版本文件))

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式解决问题:

  1. 您可以在循环中为所有对象和模型调用保存事件,其中图像使用imagemagick(RMagick)调整实际图像的大小。

    class Model < ActiveRecord::Base
      before_save do
        self.image = self.image.resize "1024x"
      end
    end
    
  2. 您将为所有图像相关数据创建新记录并销毁之前的记录。而不是使用recreate_versions方法。

    Model.all.each { |old|
      new = Modle.new(foo_id: old.foo_id, image: old.image)
      new.save!
      old.destroy
    }