Rails 3.1 RC4 remove_attachment не удаляет! - PullRequest
4 голосов
/ 13 июня 2011

Использование Carrierwave 0.5.4 на Rails 3.1 RC4.

В консоли Rails я делаю:

@foo.attachment

возвращается:

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

Тем не менее:

@foo.remove_attachment!

возвращается:

 => [:remove_versions!] 

Запись по-прежнему сохраняется в БД, НО файл удаляется в корзину S3.

Что происходит?

1 Ответ

9 голосов
/ 14 июня 2011

Ааа, после дальнейшего расследования. Это то, что я узнал. 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.

Надеюсь, это кому-нибудь поможет.

...