Пропустить обратные вызовы в драгоценном камне амебы при клонировании

Рассмотрим базовую структуру с классом A, у которого много B. Теперь при клонировании объекта A я хочу пропустить обратные вызовы объекта B. Как это сделать? Обычно мы делаем это с помощью attr_accessor, но я тоже не могу этого сделать.

https://github.com/amoeba-rb/amoeba/issues/17

Этот вопрос открыт давно.

 class File < ApplicationRecord
   amoeba do
     enable
     include_association :attachments
   end
   has_many :attachments
 end

 class Attachment < ApplicationRecord

   attr_accessor :skip_processing

   amoeba do
     enable
     # This is wrong
     set :skip_processing => true
   end

   belongs_to :file

   after_commit :process_attachment, on: :create, unless: :skip_processing
 end

При использовании attr_accessor в блоке амебы произошла ошибка, я думаю, мы можем использовать только значения DB. Есть ли решение для этого?

1 ответ

Камень Amoeba предоставляет другой препроцессор, и один из них - это настройка, которую я использовал здесь. Вы можете передать лямбда-функцию или массив лямбда-функции, в которых вы можете вызывать методы или устанавливать атрибуты для клонированного объекта. Я использовал его, чтобы установить attr_accessor следующим образом:

class Attachment < ApplicationRecord

   attr_accessor :skip_processing

   amoeba do
     enable
     customize (lambda { |original, cloned|
       # Set attr_accessor here
       cloned.skip_processing = true
     })
   end

   belongs_to :file

   after_commit :process_attachment, on: :create, unless: :skip_processing
 end
Другие вопросы по тегам