【发布时间】:2014-06-09 21:10:10
【问题描述】:
导轨 4.1 红宝石 2 视窗 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 调用,则会删除图像,从数据库中删除记录,但文件夹仍保留在那里。有任何想法吗?
可能的解决方案:
这行得通:
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
【问题讨论】:
-
你在哪里初始化
@agent?发布该代码。 -
你是说控制器的销毁方法?我现在发布了
-
你有没有像
set_agent这样的before_filter方法实际上设置@agent这样的@agent = Agent.find(params[:id])? -
我从控制器的 INDEX 方法得到了这一点。删除链接是: 并且代理是@agents.each do |agent| 的产物。如果 after_destroy 没有被调用,销毁工作正常
-
我猜在
destroying the record之后不会有id。所以@agent将是nil。错误也是如此。
标签: ruby-on-rails ruby-on-rails-4 carrierwave ruby-on-rails-4.1