Я сохраняю загрузку изображений с помощью 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