保存前使用Paperclip图像

时间:2011-08-12 14:42:05

标签: ruby-on-rails-3 callback paperclip base64

我正在使用Rails中的Paperclip保存图片上传,工作正常。

  has_attached_file :image, :styles => {
    :small => "80x90#"
  }

在创建模型时,我想要的是将小图像的副本保存为模型中的base64编码字符串。

  before_update :encode_image

  private

  def encode_image
    self.base64 = ActiveSupport::Base64.encode64(open(self.image.path(:small)).to_a.join)
  end

如果以前保存过图像,则上面的代码会对更新进行处理。我想将此逻辑应用于在模型保存之前触发的回调,但是在处理完图像之后。

我原以为after_post_process会成为我的救世主,但路径并没有完全形成(缺少身份证)。

我错过了什么?

解决方法

我的解决方法是执行以下操作,但每次更新模型时编码例程似乎都是一种耻辱:

  after_save :encode_image

  private

  def encode_image
    unless self.image.path(:small).blank?
      b64 = ActiveSupport::Base64.encode64(open(self.image.path(:small)).to_a.join)
      unless self.base64 == b64
        self.update_attribute :base64, b64
      end
    end
  end

1 个答案:

答案 0 :(得分:0)

我的解决方法是执行以下操作,但每次更新模型时编码例程似乎都是一种耻辱:

  after_save :encode_image

  private

  def encode_image
    unless self.image.path(:small).blank?
      b64 = ActiveSupport::Base64.encode64(open(self.image.path(:small)).to_a.join)
      unless self.base64 == b64
        self.update_attribute :base64, b64
      end
    end
  end