使用Carrierwave保存生成的图像 - 没有任何形式,都在模型内部

时间:2011-07-14 15:56:32

标签: ruby-on-rails ruby ruby-on-rails-3 rmagick carrierwave

这是一个棘手的问题,我希望有人可以帮助我。

我有一个article_set,它有很多set_items,每个set项都有一个图像。 我想创建一个图像的拼贴画,所以有很多图像,并用载波保存。

在我的模型中发生了什么:

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  

可能不正确,在我的数据库中我只获得了blog_image的NULL值。 当然,它应该包含生成的文件的文件名... 任何帮助高度赞赏。

感谢

1 个答案:

答案 0 :(得分:1)

第3行最后一行看起来有点狡猾:

self.blog_image = self.blog_image.store_path

如果你删除了我相当确定它应该有用。