Удаление ранее загруженного файла Carrierwave портит обработку нового файла - PullRequest
3 голосов
/ 16 марта 2012

Я использую https://github.com/jnicklas/carrierwave с AWS3 для загрузки файла моего приложения в Amazon.У меня есть модель Employee с графическим столбцом (представьте, что это изображение профиля сотрудника), к которому подключен загрузчик:

class Employee < ActiveRecord::Base

  mount_uploader :image, ProfileImageUploader

  ...

end

Всякий раз, когда сотрудник обновляет изображение профиля, я хочу, чтобыодин будет удален.Чтобы сделать это, я получил следующее: after_update callback в моей модели Employee:

class Employee < ActiveRecord::Base

  ...

  after_update :remove_changed_image, :if => 'self.image_changed?'

  def remove_changed_image
    self.image_was.remove!
  end

end

Это успешно удаляет предыдущий файл.Но я также обрабатываю загруженные картинки.В моем Uploder у меня есть следующее:

class ProfileImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  # Create different versions of your uploaded files:
  version :thumb do
    process :resize_to_limit => [300, 300]
  end

  ...

end

Проблема в том, что новые файлы вообще не обрабатываются.Загружается только одна версия, необработанная, тогда как, если я не удаляю предыдущее изображение, то все работает как надо (загружено много версий).

Любая помощь?Спасибо!

1 Ответ

0 голосов
/ 23 января 2014

Проблема с обратным вызовом after_update. Он вызывается после сохранения объекта, удаляя вновь прикрепленный файл. Вам нужно позвонить @employee.remove_image перед сохранением объекта.

...