如何在不编辑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
等等,您不应该将方法添加到文件中 ,而应该添加到类中 。 您是否熟悉重新开课的概念? 您只能通过将文件命名为定义原始类的文件来添加方法。幸运的是。 🙂