Я анализирую вложения электронной почты и загружаю их в ActiveStorage в S3.
Мы бы хотели, чтобы он игнорировал дубликаты, но я не вижу запросов по этим атрибутам.
class Task < ApplicationRecord
has_many_attached :documents
end
тогда в моей работе по электронной почте webhook
attachments.each do |attachment|
tempfile = open(attachment[:url], http_basic_authentication: ["api", ENV.fetch("MAILGUN_API_KEY")])
# i'd like to do something like this
next if task.documents.where(filename: tempfile.filename, bytesize: temfile.bytesize).exist?
# this is what i'm currently doing
task.documents.attach(
io: tempfile,
filename: attachment[:name],
content_type: attachment[:content_type]
)
end
К сожалению, если кто-то пересылает те же файлы, мы дублируемся и часто больше.
Редактировать с текущим решением:
tempfile = open(attachment[:url], http_basic_authentication: ["api", ENV.fetch("MAILGUN_API_KEY")])
md5_digest = Digest::MD5.file(tempfile).base64digest
# if this digest already exists as attached to the file then we're all good.
next if ActiveStorage::Blob.joins(:attachments).where({
checksum: md5_digest,
active_storage_attachments: {name: 'documents', record_type: 'Task', record_id: task.id
}).exists?