使用Carrierwave将不同版本的图像存储到不同的位置

时间:2014-02-25 18:12:16

标签: ruby-on-rails ruby-on-rails-4 carrierwave

我想知道是否可以将不同的图像版本存储到不同的位置。

假设我有一些像这样定义的私人Carrierwave文件夹:

def store_dir
    "#{Rails.root}/private/uploads/"
end

上传图片的几个版本:

version :medium do
    process :resize_to_limit => [400, 400]
end

version :large do
    process :resize_to_limit => [800, 800]
  end

version :thumb do
    process :resize_to_limit => [200, 200]
end

我想在已定义的store_path中存储已上传的图片,中等版本和该版本的大图片版本,但希望将鼠标版本提供给存储在公共文件夹中的用户,例如在该默认公用文件夹中: / p>

def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

我怎样才能做到这一点?谢谢!

2 个答案:

答案 0 :(得分:3)

您只需覆盖store_dir块内的version即可。所以对你的例子来说,

version :medium do
  process :resize_to_limit => [400, 400]
end

version :large do
  process :resize_to_limit => [800, 800]
end

version :thumb do
  process :resize_to_limit => [200, 200]

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
end

答案 1 :(得分:2)

在旧版本的carrierwave中我使用了version_name,我不确定它现在是否有效

def store_dir
  if version_name != 'thumb'
    # path for other versions
  else
    # path for thumb version
  end
end