Скрепка - удалить файл из Amazon S3? - PullRequest
5 голосов
/ 15 декабря 2010

Мне нужно иметь возможность удалять файлы из S3, которые хранятся пользователями, такие как фотографии профиля. Просто вызов @user.logo.destroy, похоже, не сработает - я получаю [paperclip] Saving attachments. в журналах, и файл остается прямо в корзине S3.

Как удалить сам файл?

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Это методы из Paperclip, которые можно использовать для удаления вложений:

# Clears out the attachment. Has the same effect as previously assigning
# nil to the attachment. Does NOT save. If you wish to clear AND save,
# use #destroy.
def clear(*styles_to_clear)
  if styles_to_clear.any?
    queue_some_for_delete(*styles_to_clear)
  else
    queue_all_for_delete
    @queued_for_write  = {}
    @errors            = {}
  end
end

# Destroys the attachment. Has the same effect as previously assigning
# nil to the attachment *and saving*. This is permanent. If you wish to
# wipe out the existing attachment but not save, use #clear.
def destroy
  clear
  save
end

Итак, уничтожение удаляет вложение только в том случае, если не возникает ошибка. Я пробовал это с моей собственной установкой против S3, таким образом я знаю, что уничтожение работает.

Может ли проблема в вашем случае быть в том, что у вас есть какие-либо проверки, отменяющие сохранение? Т.е. validates_attachment_presence или что-то подобное?

Я думаю, что один из способов выяснить это - попробовать @ user.logo.destroy, а затем проверить содержимое @ user.errors, чтобы увидеть, сообщает ли он о каких-либо сообщениях об ошибках.

1 голос
/ 05 января 2011

Это похоже на ответ на ваш вопрос, хотя я не совсем понимаю их различие между уничтожением и очисткой (я не знаю, какая модель имеет_attached_file, страницу или изображение):

Рельсы Скрепка, как удалить вложение?

...