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发布于 2014-06-09 10:50:48
您的问题是您没有在代理模型上实例化任何@agent变量。如果要访问记录属性,则需要使用self。因此,将remove_id_directory方法更改为如下所示:
def remove_id_directory
FileUtils.rm_rf(File.join(Cw_storage_folder, 'agent', 'avatar', self.id)) if self.avatar
endhttps://stackoverflow.com/questions/24114010
复制相似问题