Почему я не могу редактировать это изображение в Carrierwave? - PullRequest
2 голосов
/ 14 октября 2011

У меня есть две модели Mongoid, Store и Product. Их отношения таковы, что в Магазине есть Продукты, а Продукты принадлежат Магазину. Каждая из этих моделей имеет несколько изображений, которые можно прикрепить с помощью Carrierwave, которые выглядят так:

mount_uploader :logo, ImageUploader

Я могу добавлять и редактировать изображения из модели Store. Но в Product я могу добавить изображение только при создании продукта, но не при редактировании продукта. Похоже, что это проблема deep_copy, аналогично тому, как в Mongoid, если у вас есть массив с именем urls и вы хотите обновить этот массив, вы должны вызвать

urls_will_change!

Итак, я попытался вызвать эквивалентный метод (logo_will_change!) Внутри обратного вызова before_update, но он ничего не делает. Есть ли где-то еще, я должен делать это или это другая проблема?

1 Ответ

1 голос
/ 27 октября 2011

Код ниже работал для меня, так что может быть что-то еще происходит:

# 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
...