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

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

my_method在每个版本处理时执行,即三次,我只需要回调执行一次。

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

好的,关于after :store, :my_method回调,如果你把它放在你的上传器类的“主体”中,那么每次存储一个文件就会执行它,所以在你的情况下我认为它甚至不执行仅适用于您的3个版本,但也适用于您的原始文件。

假设以下代码定义了您的carrierwave上传器:

 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 

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