Rails 3.1 RC4删除附件不删除!

时间:2011-06-13 19:47:55

标签: ruby-on-rails-3 carrierwave

在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存储桶中删除。

发生了什么事?

1 个答案:

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

希望这可以帮助别人。