多个上传者的carrierwave相同回调
carrierwave same callback for multiple uploaders
我有一个包含多个上传者的 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
但这不是很聪明...
可能有更好的方法来做到这一点????
最简单的解决方案是为所有上传者创建父级 class,然后从中继承其他上传者。
如果您在父级 class 中放置一个回调,它将被所有子级执行。父 class 当然应该继承自 CarrierWave::Uploader::Base
另一种解决方案是创建一个模块并将其包含在所有上传器 classes 中。
我想我终于找到了一个方便的解决方案,感谢 Michal Szyndel 它帮助了我并给了我很好的线索:
每个上传者都继承自CarrierWave::Uploader::Base
,所以我通过carrierwave 的初始化文件(carrierwave.rb) 向它添加了一个回调,然后通过位于相关上传者中的触发器调用它。
在 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
我有一个包含多个上传者的 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
但这不是很聪明... 可能有更好的方法来做到这一点????
最简单的解决方案是为所有上传者创建父级 class,然后从中继承其他上传者。
如果您在父级 class 中放置一个回调,它将被所有子级执行。父 class 当然应该继承自 CarrierWave::Uploader::Base
另一种解决方案是创建一个模块并将其包含在所有上传器 classes 中。
我想我终于找到了一个方便的解决方案,感谢 Michal Szyndel 它帮助了我并给了我很好的线索:
每个上传者都继承自CarrierWave::Uploader::Base
,所以我通过carrierwave 的初始化文件(carrierwave.rb) 向它添加了一个回调,然后通过位于相关上传者中的触发器调用它。
在 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