我想在某些情况下在我的Rails模型中捕获和移除方法调用。有没有办法在Rails中移除方法调用?
我喜欢remove_method
之类的东西,但是它会删除方法调用。
例如,如果我在模型中有before_save
回调,我可能希望使用扩展到类中的模块来捕获它,并删除或防止before_save
发射。
这可能吗?
谢谢。
我想在某些情况下在我的Rails模型中捕获和移除方法调用。有没有办法在Rails中移除方法调用?
我喜欢remove_method
之类的东西,但是它会删除方法调用。
例如,如果我在模型中有before_save
回调,我可能希望使用扩展到类中的模块来捕获它,并删除或防止before_save
发射。
这可能吗?
谢谢。
您是否尝试过清除before_save
这样的:
before_save ->{}
编辑:
透水答案我张贴不工作 - 不知道这是否做过,但我用依稀记得在过去。例如,要跳过回调,在子类的上下文中,应该使用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本身正在为关联定义回调,即:before_save_collection_association
。
如果你只是谈论普通的Ruby对象,你可以覆盖子类中的方法。只要定义一个与超类同名的方法即可。您还可以通过包含一个与基类定义相同实例方法的模块来覆盖子类中的基类方法。
在什么情况下你可以使用这个?我很好奇 – MrYoshiji
看到我更新的答案。对困惑感到抱歉。 –
这对Rails回调很有用,但是对于Ruby方法呢。验证,包括等等。所有这些都是方法调用。我想勾选其中的任何一个。有办法吗? – Nathan