簡體   English   中英

如何在不編輯gem源的情況下為ruby gem添加方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM