试图删除carrierwave文件夹

时间:2014-06-09 05:12:04

标签: ruby-on-rails ruby-on-rails-4 carrierwave ruby-on-rails-4.1

Rails 4.1 Ruby 2 Windows 8.1

CarrierWave不会清理空目录。我试图通过在我的模型中执行以下操作来解决这个问题。

agent.rb:

after_destroy :remove_id_directory

def remove_id_directory
  if @agent.avatar
    folder_path = File.join(Cw_storage_folder, 'agent', 'avatar', @agent.id)
    FileUtils.rm_rf(folder_path)
  end
end

来自agents_controller.rb

def destroy
  @agent.destroy
  respond_to do |format|
    format.html { redirect_to agent_url }
    format.json { head :no_content }
  end
end     

当我删除记录时,收到以下错误消息:

undefined method `avatar' for nil:NilClass

并指向remove_id_directory中的第一行:

if @agent.avatar

记录未从数据库中删除。如果我删除此方法和after_destroy调用,则删除图像,从DB中删除记录,但文件夹保留在那里。有任何想法吗?

可能的解决方案:

这有效:

  after_destroy :remove_cw_id_directory

  def remove_cw_id_directory
    FileUtils.rm_rf(File.join(Cw_storage_folder, 'agent', 'agent', self.id.to_s)) if self.avatar
  end

1 个答案:

答案 0 :(得分:1)

您的问题是您没有在代理模型上实例化任何@agent变量。如果要获取记录属性,则需要使用self。 因此,将remove_id_directory方法更改为如下所示:

def remove_id_directory
    FileUtils.rm_rf(File.join(Cw_storage_folder, 'agent', 'avatar', self.id)) if self.avatar
end