Ааа, после дальнейшего расследования. Это то, что я узнал. 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 %>
Если флажок установлен и форма отправлена. Параметры будут выглядеть примерно так:
{"utf8"=>"✓", "_method"=>"put", ....., "user"=>{"remove_attachment"=>"1"}, "controller"=>"das....}
Rails интерпретирует это как @user.remove_attachment = true
, чтобы очистить столбец db, а также вызовет .remove_attachment!
, чтобы удалить файл из S3.
Также стоит отметить. Если attr_accessible определен в модели User
. Тогда должно быть и :attachment, :remove_attachment
.
Надеюсь, это кому-нибудь поможет.