我有一个带有多个上传者的rails应用程序。 在每个上传者中,我喜欢在每次删除文件后执行的功能。 我可以在每个上传器中放置一个触发器和一个回调:
after :remove, :remove_dir
def remove_dir
FileUtils.remove_dir("#{Rails.root}/public/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}", :force => true)
end
但这不是很聪明...... 可能有更好的方法来做到这一点????
答案 0 :(得分:0)
最简单的解决方案是为所有上传器创建一个父类,然后从中继承其他上传器。
如果您在父类中放置一个回调,它将由所有子项执行。父类当然应该继承自CarrierWave::Uploader::Base
另一个解决方案是创建一个模块并将其包含在所有上传器类中。
答案 1 :(得分:0)
我认为我终于找到了一个方便的解决方案,感谢Michal Szyndel帮助我并给了我很好的线索:
每个上传者都从CarrierWave::Uploader::Base
继承,所以我通过carrierwave的初始化文件(carrierwave.rb)添加回调,然后我通过相关上传者中的触发器调用它。
module CarrierWave
module Uploader
class Base
def remove_dir
path = "#{Rails.root}/public/"+store_dir
FileUtils.remove_dir(path, :force => true) if Dir[path+'/*'].empty?
end
end
end
end
在有关上传者中:
after :remove, :remove_dir