Как пропустить обратные вызовы оператора загрузки несущей при разархивировании сериализованной модели?

Моя проблема в том, что когда я уничтожаю какую-то модель с несущей

Attachment.rb

mount_uploader :attachment, AttachmentUploader

Я удаляю его из базы данных и сериализую в другую таблицу с ревизиями.

Когда пользователь исправляет удаленное вложение, мне нужно вставить строку обратно, но пропустить определенные обратные вызовы carrierwave (я думаю, пропустить загрузчик монтирования).

Код ниже может сделать это, но, к сожалению, он удаляет все обратные вызовы из модели, и они мне нужны. Поэтому я должен пропустить только загрузчик carrierwave, иначе он создает исключение с "недопустимым вложением" при создании.

  model.class.skip_callbacks do 
    model.save
  end

Это можно сделать? Спасибо!

1 ответ

Решение

Вы можете пропустить определенные обратные вызовы, используя skip_callback, указанный с помощью лямбды. Объедините это с конкретным обратным вызовом, которого вы пытаетесь избежать, и вы сможете получить тот контроль, который ищете.

class Attachment
  mount_uploader :attachment, AttachmentUploader

  skip_callback :save, :after, :store_attachment!, if: :skip_storage?

  private

  def skip_storage?
    # some skipping logic
  end
end
Другие вопросы по тегам