Предположим, у меня есть класс с методом save
и три миксина, которые модифицируют его с помощью псевдонимов, например,
module Callbacks
def save_with_callbacks
callback :before_save
save_without_callbacks
end
end
alias_method_chain :save, :callbacks
end
и аналогично для save_with_transaction
и save_with_timestamps
, смешанных в указанном порядке, поэтому MyModel#save
вызывает save_with_timestamps
, что вызывает save_with_transaction
, что вызывает save_with_callbacks
, что в итоге вызывает исходный save
.
Теперь предположим, что я хочу сохранить без транзакции. Я могу позвонить save_without_transaction
, но это не вызывает код для установки меток времени.
Как я могу сохранить свою модель с метками времени и обратными вызовами, но без транзакции?
Я мог бы переупорядочить миксины, но мой вопрос касается опускания середины, а не конкретно транзакций. Как я могу опустить середину цепочки методов?
ПРИМЕЧАНИЕ. Для краткости я использовал Roias alias_method_chain, но мой вопрос относится к ruby в целом