2011-06-13 32 views
4

在Rails 3.1 RC4上使用Carrierwave 0.5.4。Rails 3.1 RC4 remove_attachment不刪除!

在Rails控制檯,我做的:

@foo.attachment 

回報:

=> http://cdn.site_name.com/uploads/users/2/banners/banner.png 

但是:

@foo.remove_attachment! 

回報:

=> [:remove_versions!] 

該記錄仍然保留在數據庫中,但是該文件在S3存儲桶中被刪除。

這是怎麼回事?

回答

9

啊,經過進一步調查。這是我發現的。 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

希望這可以幫助別人。

+0

當然幫了我,謝謝你。 – 2012-01-18 18:07:53