Rails Paperclip, удаление вложения с параметром default_url не меняет URL вложения - PullRequest
3 голосов
/ 07 марта 2019

Моя модель пользователя имеет вложение аватара

class User
  has_attached_file :avatar, styles: { medium: '300x300#', thumb: '150x150#' }, default_url: :default_url_by_gender

  def default_url_by_gender
    if female?
      'female.svg'
    else
      'male.svg'
    end
  end
end

Перед загрузкой изображения avatar.url возвращает URL-адрес по умолчанию, когда я загружаю изображение и сохраняю, а затем удаляю его, avatar.url по-прежнему направляется на удаленныйURL-адрес изображения не default_url

Я удаляю аватар со следующим кодом:

user.avatar = nil
user.save

, а также пробовал эти методы после проверки вопрос 1 и вопрос2 о той же проблеме

user.avatar.destroy
user.save

#also tried this
user.update(avatar_file_name: nil, avatar_content_type: nil, avatar_file_size: nil)

Я использую рельсы 5.1.6, скрепка (~> 5.2.0)

1 Ответ

1 голос
/ 07 марта 2019

Вам нужно использовать purge, а не destroy. Из официальных документов https://edgeguides.rubyonrails.org/active_storage_overview.html#removing-files

Чтобы удалить вложение из модели, вызовите очистку вложения. Удаление может быть выполнено в фоновом режиме, если ваше приложение настроено на использование Active Job. Очистка удаляет BLOB-объект и файл из службы хранения.

# Synchronously destroy the avatar and actual resource files.
user.avatar.purge

# Destroy the associated models and actual resource files async, via Active Job.
user.avatar.purge_later

Удаление актива тем же способом, что и вы, не приводит к удалению вложения между экземпляром и активом:

user.avatar.destroy
user.avatar.attached? => true

user.avatar.purge
user.avatar.attached? => false
...