处理版本时如何跳过carrierwave存储回调
我在我的video uploader
类载波中定义了一个回调
after :store, :my_method
我有三个版本的文件。 original
, standard
, low
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
我在我的代码上对它进行了测试并且它有效……我知道你发布这个问题已经有很长一段时间了,可能你和我达成了同样的解决方案。 所以我决定回答它,以备将来遇到同样问题的人参考。