我想覆盖文件 document_presenter.rb 中定义的一些方法。我怎样才能做到这一点?该模块在 Blacklight gem 的“lib”目录中定义。
是否有捷径可寻?我对 Ruby 和 Rails 相当陌生(来自纯 Java 背景),所以这有点困难。
谢谢。
我想覆盖文件 document_presenter.rb 中定义的一些方法。我怎样才能做到这一点?该模块在 Blacklight gem 的“lib”目录中定义。
是否有捷径可寻?我对 Ruby 和 Rails 相当陌生(来自纯 Java 背景),所以这有点困难。
谢谢。
听起来您正在谈论猴子修补 Backlight gem 中的方法。你可能想阅读这篇文章,它解释了更多关于猴子补丁的信息——以及如何不把事情搞砸!
在 Ruby 中,您始终可以使用 class 关键字打开现有类,并使用 def 关键字重新定义原始方法。
class DocumentPresenter
def method_you_want_to_override
# Your code here.
end
end
因此,例如,您可以将上述代码放入您的 lib 文件夹中:
lib/document_presenter.rb
请参阅此答案:在 lib 文件夹中自动加载文件。
完成之后,每当你调用你在 DocumentPresenter 类的实例上打过补丁的方法时,Ruby 解释器都会运行你的代码。 不建议这样做,因为根据我链接到的博客文章,它可能会产生危险和不可预测的结果。
在 Ruby 2 中,更好的做法是使用Refinements。