Carrierwave;覆盖'thumb'方法以获得非图像资源的标准拇指

时间:2012-12-14 15:04:56

标签: ruby-on-rails ruby carrierwave

我的图片素材有拇指版本:

version :thumb, :if => :image? do
  process :resize_to_fill => [118, 100]
end

现在我的非图像资产出现了RoutingError。我尝试在AssetUploader.rb中使用拇指方法进行黑客攻击:

def thumb
  if has_image_extension?(file.original_filename)
    super
  else
    "/assets/file_types/#{extension(file.original_filename)}.jpg"
  end
end

这会产生错误(NoMethodError:super:没有超类方法`thumb'),这是有道理的。

有没有比在资产模型中制作thumb_url方法更好的解决方法?

1 个答案:

答案 0 :(得分:0)

首先,version是CarrierWave类实例的方法。第一个参数应该是一个符号,它将作为字符串附加到保存的文件名中。

然而,:if符号接收方法名称(需要实现)以决定是否应该创建版本。

问题是您的:image?方法是如何实施的!

我有一个天真的实现,在这里:

def image?( new_file )
  # TODO FIXME wrong way to check for image
  new_file.content_type.include?('image') && 
  !new_file.content_type.include?('photoshop') && 
  !new_file.content_type.include?('svg')
end