Rails 3.1 RC4 remove_attachment doesnt remove!



在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!] 

该记录仍保留在DB中,但是文件已在S3存储桶中删除。

发生了什么事?

Ahhh,经过进一步调查。这就是我发现的。remove_attachment!用于从S3中删除图像,但不用于删除数据库中附件列中的上传器对象。这是Carrierwave的正常行为。

Jnicklas在https://github.com/jnicklas/carrierwave/commit/ecabc618d0fce22c1931c6d2eb134886e3b60e4c其使用CCD_ 2。这是关键,因为当一个人提交表格以删除附件/图像/照片/任何东西时。它们通常包括一个复选框,看起来像:

<input type="checkbox" value="1" name="user[remove_attachment]" id="user_remove_attachment">

可以使用helper标签将其呈现为:

<%= f.check_box :remove_attachment %>

如果单击复选框并提交表单。参数看起来像:

{"utf8"=>"✓", "_method"=>"put", ....., "user"=>{"remove_attachment"=>"1"}, "controller"=>"das....}

Rails会将其解释为@user.remove_attachment = true以清除db列,并触发.remove_attachment!从S3中删除该文件。同样值得注意的是。如果在User模型中定义了attr_accessible。那么它也必须具有:attachment, :remove_attachment

希望这能帮助到别人。

相关内容

  • 没有找到相关文章

最新更新