Rails回形针,使用default_url选项删除附件不会更改附件url

时间:2019-03-07 15:39:54

标签: ruby-on-rails ruby paperclip

我的用户模型具有头像附件

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

,并在检查后尝试了这些方法 question 1question2 关于同一问题

user.avatar.destroy
user.save

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

我正在使用Rails 5.1.6,回形针(〜> 5.2.0)

1 个答案:

答案 0 :(得分:1)

您需要使用purge,而不是destroy。根据官方文档,@nuxtjs/sitemap

  

要从模型中删除附件,请在附件上调用清除。如果您的应用程序设置为使用“活动作业”,则可以在后台进行删除。清除会从存储服务中删除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