Rails 3.1 RC4 remove_attachment不会删除!

Chr*_*ini 4 ruby-on-rails-3 carrierwave

在Rails 3.1 RC4上使用Carrierwave 0.5.4.

在Rails控制台中,我做:

@foo.attachment
Run Code Online (Sandbox Code Playgroud)

收益:

=> http://cdn.site_name.com/uploads/users/2/banners/banner.png 
Run Code Online (Sandbox Code Playgroud)

然而:

@foo.remove_attachment!
Run Code Online (Sandbox Code Playgroud)

收益:

 => [:remove_versions!] 
Run Code Online (Sandbox Code Playgroud)

记录仍保留在DB中,该文件在S3存储桶中被删除.

到底是怎么回事?

Chr*_*ini 9

啊,经过进一步调查.这是我发现的.remove_attachment!意味着从S3中删除图像,但并不意味着删除db中附件列中的上传器对象.这是Carrierwave的正常行为.

Jnicklas在提供的测试SPECT https://github.com/jnicklas/carrierwave/commit/ecabc618d0fce22c1931c6d2eb134886e3b60e4c其使用 @doc.remove_image = true.这是关键,因为当提交表单以删除附件/图像/照片/其他时.它们通常包含一个复选框,如下所示:

<input type="checkbox" value="1" name="user[remove_attachment]" id="user_remove_attachment">
Run Code Online (Sandbox Code Playgroud)

可以使用辅助标记呈现为:

<%= f.check_box :remove_attachment %>
Run Code Online (Sandbox Code Playgroud)

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

{"utf8"=>"?", "_method"=>"put", ....., "user"=>{"remove_attachment"=>"1"}, "controller"=>"das....}
Run Code Online (Sandbox Code Playgroud)

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

希望这有助于某人.