看起来这是一个已知问题,但我无法找到任何解决方案,也无法找到任何脏修复工具。问题是我无法删除使用Carrierwave插件上传的附件。
我正在使用一个名为:remove_avatar
的特殊表单字段,它应删除头像文件并清除头像列,但它唯一要做的就是删除文件,头像列中的文件引用仍然存在。
我试图以任何可能的方式删除它,但没有运气。
使用u.update_attributes( :avatar => "" )
并未删除引用
u = User.find(int)
u.avatar = ""
u.save
也没有删除引用
u.remove_avatar = true
u.save
不工作
u.remove_avatar!
u.save
不工作
不工作
“不工作”是指文件从文件系统中删除,但引用仍然存在。
您可以给我提供任何提示,我可以使用它再次使用吗?它可能是脏的东西,这个错误在我的截止日期前一天显示,我感到非常绝望。提前谢谢。
Ruby:1.8.7
Rails:3.2.6
Carrierwave:来自git repo的主分支
答案 0 :(得分:3)
根据this thread,您可以使用update_column
代替update_attribute
来管理此问题,然后(由于我目前尚不清楚的原因),真正强制重新加载-memory对象(而不只是在其上调用reload
):
u = User.where('avatar is not null').last # Get a user with an avatar
u.update_column(:avatar, nil) # Use update_column to avoid callbacks
u = User.where(:id => u).first # Force a reload of the object. No, u.reload doesn't work. No, I don't know why.
当我在我的控制台中执行此操作时,u.avatar
最终为空白。
我的版本信息,如果这不适合你:Ruby 1.9.3,Rails 3.2.2,PostgreSQL 9.2,CarrierWave 0.5.7