Хук 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
Другие вопросы по тегам