在某些情况下,我想捕获并删除我的 Rails 模型中的方法调用。
我想要像 remove_method
这样的东西,但它会删除方法调用。
例如,如果我在模型中有一个 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 对象,您可以覆盖子类中的方法。只需定义一个与父类(super class)同名的方法。您还可以通过包含一个定义与基类相同的实例方法的模块来覆盖子类中的基类方法。
关于ruby-on-rails - 有没有办法删除 Rails 中的方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13772693/