假设我有一个带有save
方法的类,以及三个使用别名修改它的mixin,例如
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
,调用{{1} }},最终调用原始save_with_callbacks
。
现在假设我想在没有交易的情况下保存。我可以调用save
,但这并不会调用代码来设置时间戳。
如何使用时间戳和回调保存模型,但没有事务?
我可以重新排序mixins,但我的问题是省略中间,而不是专门的交易。如何省略方法链的中间部分?
注意 - 为了简洁,我使用了RoR的alias_method_chain,但我的问题一般适用于ruby
答案 0 :(得分:2)
你唯一的选择似乎是 - 无论如何 - 提供第二个调用链来进一步处理这个功能。我不认为你可以用别名来做这件事;你将不得不定义一个调用旧方法的新方法 - 所以类似于:
(顺便说一句,不是很长的别名链会让你的代码很难阅读吗?我个人认为我会努力避免它们。)