在Rails 3.1 RC4上使用Carrierwave 0.5.4。
在Rails控制台中,我这样做:
@foo.attachment
返回:
=> http://cdn.site_name.com/uploads/users/2/banners/banner.png
然而:
@foo.remove_attachment!
返回:
=> [:remove_versions!]
记录仍保留在数据库中,但该文件已在S3存储桶中删除。
发生了什么事?
答案 0 :(得分:9)
remove_attachment!
用于从S3中删除图像,但并不意味着删除db中附件列中的上传器对象。这是Carrierwave的正常行为。
Jnicklas在使用@doc.remove_image = true
的{{3}}提供了测验。这是关键,因为当提交表单以删除附件/图像/照片/其他时。它们通常包含一个如下所示的复选框:
<input type="checkbox" value="1" name="user[remove_attachment]" id="user_remove_attachment">
可以使用辅助标记呈现:
<%= f.check_box :remove_attachment %>
如果单击复选框并提交表单。 Params看起来像:
{"utf8"=>"✓", "_method"=>"put", ....., "user"=>{"remove_attachment"=>"1"}, "controller"=>"das....}
Rails会将此解释为@user.remove_attachment = true
以清除db列,并触发.remove_attachment!
以从S3中删除该文件。
另外值得注意的是。如果在User
模型中定义了attr_accessible。然后它也必须有:attachment, :remove_attachment
。
希望这可以帮助别人。