我正在使用acts_as_taggable_on
gem,并希望为其中一个gem源文件(tag.rb
)添加一个方法,但我不想以任何方式更改gem源。 / p>
我已经尝试在/app/models
目录或/lib
目录中创建我自己的tag.rb文件,然后将期望的方法添加到该文件中,期望ruby将合并这两个标记。 rb文件
但是当我这样做时,我得到了NoMethodError: undefined method
...
我错过了什么?
答案 0 :(得分:4)
我认为你重新开启Tag课是正确的。我不介绍另一个级别的继承,除非它对你的代码真的有意义。
我不确定,为什么重新打开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
答案 1 :(得分:2)
等等,您不应该将方法添加到文件,而应添加到类。您熟悉reopening the class的概念吗?您只能通过将文件命名为定义原始类的文件来添加方法。幸运的是。 :)