在after_post_process回调期间从Paperclip Gem获取正确的路径/ URL?

时间:2014-04-25 16:46:52

标签: ruby-on-rails ruby paperclip

我有一个相当标准的Paperclip设置,它几乎完全脱离了自述文件。我有一个通过回调触发的简单方法,从上传的图像中获取原色,并将它们保存到相应的实例中。

class Image < ActiveRecord::Base
    has_attached_file :file, :styles => { large: "800x>", :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
    validates_attachment_content_type :file, :content_type => /\Aimage\/.*\Z/

    after_post_process :get_colors

    def get_colors
      colors = Miro::DominantColors.new(self.file.url)
      colors = colors.to_hex.join(',')
      self.colors = colors
      self.save       
    end
end

正如您所看到的,我有一个after_post_process回调,它确实被触发了。麻烦的是当我打电话给self.file.url时,我得到一条看起来像这样的路径:

"/system/images/files//original/Peterson-Products-Wireframe-v01.jpg?1398443345"

缺少:id_partion部分。它的真实路径看起来应该更像:

"/system/images/files/000/000/033/original/Peterson-Products-Wireframe-v01.jpg?1398443345"

我应该使用其他一些回调吗?我只希望每次上传时触发一次...如果图像更新,则不会再次触发。这是回形针中的一个错误,我应该在Github上提交?

  • Rails版本4.1
  • Paperclip Version 4.1
  • Ruby 2.1.0

非常感谢!

1 个答案:

答案 0 :(得分:1)

尝试 queued_for_write

colors = Miro::DominantColors.new(file.queued_for_write[:original].path)