![](/img/trans.png)
[英]Rails 3: How to add a method to the Gem model without changing the Gem source
[英]How do I add a method to a ruby gem without editing the gem source?
我正在使用acts_as_taggable_on
gem並想在其中一個gem源文件( tag.rb
)中添加一個方法,但我不想以任何方式更改gem源。
我已經嘗試在/app/models
目錄或/lib
目錄中創建我自己的tag.rb文件,然后將期望的方法添加到該文件,期望ruby將合並兩個tag.rb文件
但當我這樣做時,我得到一個NoMethodError: undefined method
......
我錯過了什么?
我認為你重新開啟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
等等,你不應該在文件中添加方法,而應該在類中添加方法。 您是否熟悉重新開課的概念? 您只能通過將文件命名為定義原始類的文件來添加方法。幸運的是。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.