Почему я не могу отредактировать это изображение в Carrierwave?
У меня есть две монголоидные модели, магазин и продукт. Их связь заключается в том, что магазин имеет множество продуктов, а продукты принадлежат магазину. Каждая из этих моделей имеет несколько изображений, которые могут быть прикреплены с помощью Carrierwave, которые выглядят следующим образом:
mount_uploader :logo, ImageUploader
Я могу добавлять и редактировать изображения, которые находятся в модели магазина. Но в Product я могу добавить изображение только при создании продукта, но не при редактировании продукта. Это, кажется, каким-то образом является проблемой deep_copy, подобно тому, как в Mongoid, если у вас есть массив называется urls, и вы хотите обновить этот массив, вы должны вызвать
urls_will_change!
Поэтому я попытался вызвать эквивалентный метод (logo_will_change!) внутри обратного вызова before_update, но он ничего не делает. Есть ли где-то еще, где я должен делать это, или это еще одна проблема?
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