我的用户模型有头像附件
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会返回默认网址,当我上传图片并保存然后将其删除时,avatar.url仍会直接指向已删除的图片网址而不是default_url
我用以下代码删除了头像:
user.avatar = nil
user.save
并且在检查question 1和question2 之后也尝试了这些方法
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,paperclip(〜> 5.2.0)
你需要使用purge
,而不是destroy
。来自官方文档,https://edgeguides.rubyonrails.org/active_storage_overview.html#removing-files
要从模型中删除附件,请在附件上调用清除。如果您的应用程序设置为使用活动作业,则可以在后台执行删除。清除将从存储服务中删除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