处理版本时如何跳过carrierwave存储回调

时间:2014-06-24 04:48:49

标签: ruby-on-rails file-upload callback version carrierwave

我在video uploader类载波中定义了一个回调 after :store, :my_method
我有三个版本的文件。 originalstandardlow

处理每个版本时执行

my_method,即三次,我只需要回调执行一次。

1 个答案:

答案 0 :(得分:8)

我知道这是一个非常晚的回复,但我最近遇到了同样的问题所以我决定发布我是如何解决这个问题的#34;问题"因为它似乎没有在carrierwave的github页面上记录(或者我无法找到它)。

好的,关于after :store, :my_method回调,如果你把它放在"主体"你的上传程序类,然后它会在每次存储文件时执行,所以在你的情况下我认为它甚至不仅针对你的3个版本而且针对你的原始文件执行。

我们假设以下代码定义了您的运载波上传器:

class PhotoUploader < CarrierWave::Uploader::Base
  after :store, :my_method

  version :original do
    process :resize_to_limit => [1280,960]
  end

  version :standard, from_version: :original do
    process :resize_to_limit => [640,480]
  end

  version :low, from_version: :standard do
    process :resize_to_limit => [320,240]
  end

  protected
    def my_method
      puts self.version_name
    end
end

这样,after :store将针对存储的每个文件执行,但是如果您只想执行它,那么请说明,对于:low版本,所有人必须做的是在你的版本定义中移动该行。像这样:

class PhotoUploader < CarrierWave::Uploader::Base

  version :original do
    process :resize_to_limit => [1280,960]
  end

  version :standard, from_version: :original do
    process :resize_to_limit => [640,480]
  end

  version :low, from_version: :standard do
    process :resize_to_limit => [320,240]
    after :store, :my_method
  end

  protected
    def my_method
      puts self.version_name
    end
end

我在我的代码上对它进行了测试并且它有效...我知道自从你发布这个问题以来已经很长时间了,可能你和我达成了同样的解决方案。因此,我决定回答它,以便将来遇到同样问题的人参考。