ruby-on-rails - 有没有办法删除 Rails 中的方法调用?

标签 ruby-on-rails ruby

在某些情况下,我想捕获并删除我的 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/

相关文章:

ruby-on-rails - Rails 批量构建和保存

arrays - Ruby - 将数组元素移动到给定位置

ruby-on-rails - 使用 Ruby/Rails 在当前周期中寻找容量

ruby-on-rails - Rails 3 和 JSON : Default renderer but custom mime type

ruby-on-rails - Rails 雇主和雇员设计

ruby-on-rails - 不同的前缀 : "/" and "http:/localhost:3000" with devise

ruby-on-rails - Flash 消息的 CSS 样式

ruby-on-rails - 使用“belongs_to”和“has_many”保存时,Rails 模型错误未知属性

css - 如何在 xxx.css.scss 中使用 xxx.rb 中的元素?

ruby-on-rails - has_many 关系中 child 数量的 rails3 范围