啊,經過進一步調查。這是我發現的。 remove_attachment!
是爲了從S3中刪除圖像,但並不意味着刪除附件列中的上傳器對象。這是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">
可與輔助標籤被渲染爲:
<%= f.check_box :remove_attachment %>
如果點擊複選框,並提交表單。 PARAMS看起來像:
{"utf8"=>"✓", "_method"=>"put", ....., "user"=>{"remove_attachment"=>"1"}, "controller"=>"das....}
Rails會將此解釋爲@user.remove_attachment = true
清除數據庫列,也引發.remove_attachment!
從S3刪除該文件。 也值得一提。如果在User
模型中定義了attr_accessible。那麼它也必須有:attachment, :remove_attachment
。
希望這可以幫助別人。
當然幫了我,謝謝你。 – 2012-01-18 18:07:53