Сохранение сгенерированного изображения с Carrierwave - без формы, все внутри модели - PullRequest
3 голосов
/ 14 июля 2011

это сложно, я надеюсь, что кто-то может мне помочь.

У меня есть article_set, в котором есть много set_items, у каждого элемента набора есть изображение.Я хочу создать коллаж из изображений, поэтому одно изображение из многих, и сохранить его с помощью carrierwave.

Вот что происходит в моей модели:

require 'RMagick'

class ArticleSet < ActiveRecord::Base

    # ...

    after_create :create_collage  
    mount_uploader :blog_image, BlogImageUploader

    def create_collage
      # load the template
      template = Magick::Image.read("#{RAILS_ROOT}/public/images/set_template.png").first

      # go through all set items by z_index and add lay it over the template
      for item in self.set_items
        photo = Magick::Image.read(item.product.assets.first.image.url(:thumb).to_s).first
        photo.scale(item.width, item.height)
        # composite item over template offsetting pos_x and pos_y for the template border
        template.composite!(photo, item.pos_x, item.pos_y, Magick::OverCompositeOp)
      end

      # save composite image to JPG
      template.write("set_#{self.id}_#{Time.now.to_i}.jpg")

      #save and upload to s3

      self.blog_image.store!(template)
      self.blog_image = self.blog_image.store_path
      self.write_carrierwave_identifier
      self.save  

    end

end

Пока чтохорошо.Я могу сохранить набор, и он запускается через этот метод, но я думаю, что последняя часть

       #save and upload to s3

      self.blog_image.store!(template)
      self.blog_image = self.blog_image.store_path
      self.write_carrierwave_identifier
      self.save  

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

спасибо

1 Ответ

1 голос
/ 18 июля 2011

Эта третья последняя строка выглядит немного хитроумно:

self.blog_image = self.blog_image.store_path

Если вы удалите это, я почти уверен, что это должно сработать.

...