我知道这是一个很晚的回复,但我最近遇到了同样的问题,所以我决定发布我是如何解决这个“问题”的,因为它似乎没有记录在 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
我在我的代码上对其进行了测试,它可以工作......我知道你发布这个问题已经很长时间了,可能你得到了与我相同的解决方案。所以我决定回答这个问题,以供以后遇到同样问题的人参考。