我想在我的Rails 4.2應用程序中擴展字符串類。我創建了一個lib/string.rb文件來保存擴展名。自動需要在Rails 4中的lib文件
class String
def testing
"testing"
end
end
我將lib
添加到application.rb中的autoload_paths。
config.autoload_paths << Rails.root.join('lib')
當我啓動軌道控制檯和執行"".testing
,我得到NoMethodError: undefined method 'testing' for "":String
任何人都可以解釋爲什麼這種方法沒有得到回升?我有一個預感,這是因爲String
常量已經加載,所以Rails不需要自動加載常量。因此,它永遠不會嘗試加載lib/string.rb
文件,我的方法永遠不會被添加到字符串中。
當我在初始化程序中明確要求文件時,我可以加載該方法,但是如果更改該方法,則必須重新啓動服務器才能使rails看到更改。這感覺就像我失去了一些東西。看起來應該有一種方法讓Rails自動讀取核心擴展類並在文件更改時重新加載它們。
我把所有的猴子補丁放在lib/monkey中,並將以下內容添加到application.rb的底部:Dir.glob(Rails.root.join'lib','monkey' ,'**','* .rb')。each {| f |要求f} – mockaroodev
謝謝。我最終用'Dir.glob(Rails.root.join'lib','autorequire','**','* .rb')創建了一個初始化程序。需要f}'。這將找到'lib/autorequire'目錄下的所有.rb文件以及所有子目錄,無論它們的嵌套程度如何。 – CodeSmith