по умолчанию уничтожить задачу sidekiq

В моем приложении Rails у меня есть модель Steps, которая может иметь много изображений:

class Step < ActiveRecord::Base
     has_many :images, :dependent => :destroy
     ...

Из-за зависимого условия уничтожения, когда я удаляю шаг, он удаляет все соответствующие изображения.

Однако я бы хотел, чтобы удаление изображений происходило в фоновой задаче. Я знаю, что могу сделать это с помощью sidekiq, вызвав работника в контроллере примерно так:

    @step.images.each do |image|
      CarrierwaveImageDeleteWorker.perform_async(image.id)
    end

Но поскольку изображения автоматически удаляются из-за зависимого условия уничтожения, я не уверен, как я могу вызвать работника sidekiq. Как лучше всего сделать так, чтобы изображения автоматически вызывали фоновую задачу sidekiq после запуска действия уничтожения?


person scientiffic    schedule 04.02.2014    source источник


Ответы (1)


Я исправил эту проблему, переопределив метод уничтожения по умолчанию в моей модели изображения следующим образом:

  # override destroy method to put it in a background task
  class Image < ActiveRecord::Base

  def destroy
    CarrierwaveImageDeleteWorker.perform_async(self.id)
  end
person scientiffic    schedule 04.02.2014
comment
Можете ли вы улучшить свой ответ с помощью кода CarrierwaveImageDeleteWorker? - person Rafael Oliveira; 13.03.2014