Rails Paperclip,使用default_url选项删除附件不会更改附件网址

问题描述 投票:3回答:1

我的用户模型有头像附件

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 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,paperclip(〜> 5.2.0)

ruby-on-rails ruby paperclip
1个回答
1
投票

你需要使用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
© www.soinside.com 2019 - 2024. All rights reserved.