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
答案 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