如何在不编辑gem源的情况下向ruby gem添加方法?

我正在使用acts_as_taggable_on gem并想在其中一个gem源文件( tag.rb )中添加一个方法,但我不想以任何方式更改gem源。

我已经尝试在/app/models目录或/lib目录中创建我自己的tag.rb文件,然后将期望的方法添加到该文件,期望ruby将合并两个tag.rb文件

但是当我这样做时,我得到一个NoMethodError: undefined method ……

我错过了什么?

我认为你重新开启Tag课是正确的。 除非对你的代码真的有意义,否则我不会介绍另一个级别的inheritance。

我不确定,为什么重新打开Tag类不起作用。 一些想法:

1 – 当你编写自己的Tag类时,它是从ActiveRecord :: Base下载的吗? Tag类作为可标记的就可以了,我可以看到如何忽略可能会搞砸了。

2 – 如果我需要一个地方来放置为单个方法重新打开插件类的代码,我可能会把它放在初始化文件中(例如config / initializers / tag_patch.rb)。 只是为了保持清洁。

3 – 如果所有其他方法都失败了,您仍然无法正确地重新打开Tag类(无论出于何种原因),您可能会尝试添加其他元编程技术。 例如:

 Tag.send(:define_method, “method_name”) do #code for your method end 

等等,您不应该将方法添加到文件中 ,而应该添加到类中 。 您是否熟悉重新开课的概念? 您只能通过将文件命名为定义原始类的文件来添加方法。幸运的是。 🙂