该问题出现的原因是,Active Storage使用了缓存机制,当上传相同文件名的附件时,会在缓存中创建一个新的附件记录,导致出现重复附件的情况。解决方法是要使用缓存的id来标识附件。
示例代码:
class User < ApplicationRecord
has_one_attached :avatar
def attach_avatar(file)
# Use digest to generate cache key with unique cache_id
cache_key = "#{self.class.name.downcase}/#{id}/#{SecureRandom.hex(5)}-#{Digest::SHA1.hexdigest(file.read)}"
avatar.attach(io: file, filename: file.original_filename, content_type: file.content_type, cache_key: cache_key)
end
end
在示例代码中,使用了Digest来生成唯一的cache_key,这样可以避免出现重复附件的情况。同时,在调用attach
方法时,加上cache_key
参数。
这样,就能够有效地解决Active Storage中添加附件出现重复的问题。