Хук ActiveStorage после анализа - PullRequest
       16

Хук ActiveStorage после анализа

0 голосов
/ 12 октября 2018

У меня есть фотографии, прикрепленные к модели.Эти изображения анализируются, и данные 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, потому что это также выполняется для других вложений.)

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 07 февраля 2019

Я не смог найти ничего официального.В итоге я переопределил работу по анализу, так как она в любом случае очень проста.Похоже ниже.

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
...