我想爲我的Rails項目中的不同對象構建一個索引,並且希望添加一個可以在String對象上調用的'count_occurences'方法。在Rails中,如何爲String類添加一個新的方法?
我看見我可以做類似
class String
def self.count_occurences
do_something_here
end
end
什麼來定義這種方法的具體方式,以及放置的代碼在我的Rails項目?
感謝
我想爲我的Rails項目中的不同對象構建一個索引,並且希望添加一個可以在String對象上調用的'count_occurences'方法。在Rails中,如何爲String類添加一個新的方法?
我看見我可以做類似
class String
def self.count_occurences
do_something_here
end
end
什麼來定義這種方法的具體方式,以及放置的代碼在我的Rails項目?
感謝
您可以在lib/ext/string.rb
定義在應用程序中一個新的類,並把它這個內容:
class String
def to_magic
"magic"
end
end
要加載此類,您需要在您的config/application.rb
文件或初始化程序中要求它。如果你有很多這樣的擴展,初始化就更好了!加載它的方法很簡單:然後
require 'ext/string'
的to_magic
方法將可在情況下,您的應用程序/控制檯內部的String
類,即:
>> "not magic".to_magic
=> "magic"
無插件必要的。
當你想延長一些核心類,那麼你通常要創建一個插件(當需要在另一個應用程序的代碼很方便)。在這裏,你可以找到一個指導如何創建一個插件http://guides.rubyonrails.org/plugins.html和點#3你展示如何擴展String類:http://guides.rubyonrails.org/plugins.html#extending-core-classes
有沒有一種方法可以完成同樣的事情,而不必創建一個完整的插件(這對我想完成的工作似乎有很多工作...)? – alex
我知道Ryan發佈的另一個解決方案,它也是正確的。毫無疑問。但我建議你插件,因爲這是我們在我們公司做的。當你創建一個插件,你可以把它放在github上,每個人都可以將它安裝到他/她的應用程序中。我知道這是更多的工作,但通常是值得的。我真的不覺得我應該在這裏扣除點... –
我知道這是一箇舊的線程,但它似乎並不像接受的解決方案在Rails 4+中工作(至少不適用於我)。將擴展rb文件放入config/initializers中。
或者,您可以添加/ lib添加到Rails的自動加載磁帶機(在配置/ application.rb中,在應用程序類:
config.autoload_paths += %W(#{config.root}/lib)
require 'ext/string'
看到這個: http://brettu.com/rails-ruby-tips-203-load-lib-files-in-rails-4/
這是醜陋的,如果有什麼的其他庫也增加了一個'count_occurences'方法,它不會完全相同的東西? – arnaud576875
那麼你建議我做什麼? – alex
大概是別的東西沒有這種方法或他已經使用它 – rogerdpack