在某些情况下,我想在我的Rails模型中捕获并删除方法调用。
我喜欢像remove_method
这样的东西,但这会移除方法调用。
例如,如果我在模型中有before_save
回调,我可能想要使用扩展到类中的模块捕获它,并删除或阻止before_save
触发。
这可能吗?
感谢。
答案 0 :(得分:4)
修改强>
我发布的过去的答案不起作用 - 不确定它是否曾经存在过,但我依旧回忆起过去的使用情况。例如,要跳过回调,在子类的上下文中,您应该使用skip_callback
。用法示例:
skip_callback :save, :before, :callback_method_name
或者,如果您想跳过针对特定条件的回调:
skip_callback :save, :before, :callback_method_name, if: :some_condition_true?
还有一个reset_callbacks
方法将回调类型作为参数。例如,reset_callbacks :save
。可以通过类方法_save_callbacks
,_create_callbacks
等来访问回调。在使用reset_callbacks
时我会谨慎,因为看起来Rails本身正在定义关联的回调,即{ {1}}。
如果您只谈论常规Ruby对象,则可以覆盖子类中的方法。只需定义一个与超类同名的方法。您还可以通过包含一个定义与基类相同的实例方法的模块来覆盖子类中的基类方法。
答案 1 :(得分:-1)
您是否尝试过像这样清除before_save
:
before_save ->{}