Хук ActiveStorage после анализа
У меня есть фотографии, прикрепленные к модели. Эти изображения анализируются, а данные EXIF сохраняются в виде метаданных на ActiveStorage::Blob
,
class Foo < ApplicationRecord
has_one_attached :picture
end
В этой модели есть атрибут, который я использую для сортировки order_date
, Этот атрибут должен обновляться со временем EXIF после анализа большого двоичного объекта.
Используя скрепку, before_commit
Метод обратного вызова был достаточным. С ActiveStorage я тоже пробовал before_save
а также after_touch
но оба не работают.
Как я могу запустить код сразу после ActiveStorage::AnalyzeJob
успешно побежал?
(Я хочу избежать мартышек ActiveStorage::AnalyzeJob
, потому что это также выполняется для других вложений.)
Большое спасибо за вашу помощь!
0 ответов
Я не мог найти ничего официального. В итоге я переопределил работу по анализу, так как она в любом случае очень проста. Похоже ниже.
class ActiveStorage::AnalyzeJob < ActiveStorage::BaseJob
def perform(blob)
blob.analyze
blob.attachments.includes(:record).each do |attachment|
if attachment.record_type == 'Content'
record = attachment.record
record.set_file_info
record.save!
end
end
end
end