啊,经过进一步调查。这是我发现的。remove_attachment!
旨在从 S3 中删除图像,但并不意味着删除 db 中附件列中的上传器对象。这是 Carrierwave 的正常行为。
Jnicklas 在https://github.com/jnicklas/carrierwave/commit/ecabc618d0fce22c1931c6d2eb134886e3b60e4c提供了一个测试图,它使用 @doc.remove_image = true
. 这是关键,因为当一个人提交表单以删除附件/图像/照片/任何东西时。它们通常包含一个复选框,如下所示:
<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 中删除文件。也值得注意。如果在模型中定义了 attr_accessible User
。那么它也必须有:attachment, :remove_attachment
。
希望这可以帮助某人。