Rails CarrierWave 设置 version 时出现问题

tiseheaini · October 29, 2015 · Last by tiseheaini replied at October 29, 2015 · 1707 hits

在本地一个项目中我使用了 CarrierWave 进行文件处理,同时设置了一些小尺寸的 version

ImageUploader 部分代码

class ProductImageUploader < CarrierWave::Uploader::Base
  def store_dir
      "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :s_thumb do
      process :resize_to_fit => [100, 100]
  end

  def filename
    if super.present?
      @name ||= Digest::MD5.hexdigest(current_path)
      "#{Time.now.year}/#{@name}.#{file.extension.downcase}"
    end
  end
end

上传一张图片后,会有两个版本的图片,大家注意一下,这里的两个文件的图片名不相同。

33
├── 2015
│   └── 11a542587b175124adaeee5ab03f0b4b.png
└── s_thumb_2015
    └── 79c877b6948bedb1377396199c33d1c7.png

2 directories, 2 files
irb(main):017:0> Image.find(33).file.url
=> "/uploads/image/file/33/2015/11a542587b175124adaeee5ab03f0b4b.png"

irb(main):018:0> Image.find(33).file.s_thumb.url
=> "/uploads/image/file/33/s_thumb_2015/11a542587b175124adaeee5ab03f0b4b.png"

当我在代码中使用时,CarrierWave 给出的文件名是相同的,导致我没办法找到图片。 这个问题不知道出在哪里,也不知道怎么 Google 关键字

try

@name ||= Digest::MD5.hexdigest(File.dirname(current_path))

我也有这个问题,参照#1 楼 @huobazi 的方法解决了。

#1 楼 @huobazi #2 楼 @springwq 谢谢,问题解决了,我也发现是 @name 的问题,只是不知道如何去解决,很感谢你们的帮助

You need to Sign in before reply, if you don't have an account, please Sign up first.