Пропустить обратные вызовы в драгоценном камне амебы при клонировании
Рассмотрим базовую структуру с классом 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