Работа с изображениями Paperclip перед сохранением - PullRequest
2 голосов
/ 12 августа 2011

Я сохраняю загрузку изображений с помощью Paperclip в Rails, которая работает нормально.

  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 голосов
/ 26 апреля 2012

Мой обходной путь заключается в том, чтобы сделать следующее, но, кажется, позорное выполнение, которое кодирует процедуру каждый раз, когда вы обновляете модель:

  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
...