为什么我不能在Carrierwave中编辑这个图像?

时间:2011-10-13 20:07:22

标签: ruby-on-rails ruby mongodb mongoid carrierwave

我有两个Mongoid模型,Store和Product。他们的关系是商店has_many产品,产品属于商店。每个模型都有一些可以使用Carrierwave附加的图像,如下所示:

mount_uploader :logo, ImageUploader

我可以添加和编辑Store模型中的图像。但是在产品中我只能在创建产品时添加图像,但不能在编辑产品时添加。这看起来似乎是一个deep_copy问题,类似于Mongoid中如果你有一个名为urls的数组并且你想要更新该数组,你必须调用

urls_will_change!

所以我尝试在before_update回调中调用等效方法(logo_will_change!),但它没有做任何事情。是否有其他地方我应该这样做或者是另一个问题?

1 个答案:

答案 0 :(得分:1)

下面的代码对我有用,所以可能会有其他事情发生:

# store model
class Store
  include Mongoid::Document
  mount_uploader :image, ImageUploader
  has_many :products
  field :name, type: String
end

# product model
class Product
  include Mongoid::Document
  mount_uploader :image, ImageUploader
  belongs_to :store
  field :name, type: String  
end

# image uploader
class ImageUploader < CarrierWave::Uploader::Base
  storage :file
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
end

# some test data
@store = Store.new({:name => "store"})
@product = Product.new({:name => "product"})
@store.save
@store.products << @product

# later get the product and update the image
@product = Product.first
puts @product.image.url # blank
@product.update_attributes({:image => File.open("/path/to/image.png")})
puts @product.image.url # now has image url