删除Carrierwave以前上传的文件会混淆新的文件处理

时间:2012-03-16 15:34:59

标签: ruby-on-rails-3 carrierwave

我正在使用AWS https://github.com/jnicklas/carrierwave将我的应用文件上传到亚马逊。我有一个带有图像列的员工模型(将其视为员工个人资料图片),其上载了一个上传器:

class Employee < ActiveRecord::Base

  mount_uploader :image, ProfileImageUploader

  ...

end

每当员工更新其个人资料图片时,我希望删除之前的个人资料。为了做到这一点,我有以下内容:在我的Employee模型中的after_update回调:

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 :(得分:0)

问题在于after_update回调。保存对象后调用它,从而删除新附加的文件。您需要在保存对象之前调用@employee.remove_image