我有两个Mongoid模型,Store和Product。他们的关系是商店has_many产品,产品属于商店。每个模型都有一些可以使用Carrierwave附加的图像,如下所示:
mount_uploader :logo, ImageUploader
我可以添加和编辑Store模型中的图像。但是在产品中我只能在创建产品时添加图像,但不能在编辑产品时添加。这看起来似乎是一个deep_copy问题,类似于Mongoid中如果你有一个名为urls的数组并且你想要更新该数组,你必须调用
urls_will_change!
所以我尝试在before_update回调中调用等效方法(logo_will_change!),但它没有做任何事情。是否有其他地方我应该这样做或者是另一个问题?
答案 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