我想在我的Rails项目中为不同的对象构建索引,并希望添加一个'count_occurences'方法,我可以在String对象上调用它。
我看到我可以做类似
的事情class String
def self.count_occurences
do_something_here
end
end
定义此方法的确切方法是什么,以及将代码放在我的Rails项目中的哪个位置?
由于
答案 0 :(得分:92)
您可以在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"
无需插件。
答案 1 :(得分:12)
我知道这是一个旧线程,但似乎并不像Rails 4+中所接受的解决方案(至少不适合我)。将扩展名rb文件放入config / initializers中。
或者,您可以将/ lib添加到Rails自动加载器(在config / application.rb中,在Application类中:
config.autoload_paths += %W(#{config.root}/lib)
require 'ext/string'
看到这个: http://brettu.com/rails-ruby-tips-203-load-lib-files-in-rails-4/
答案 2 :(得分:4)
当你想扩展一些核心类时,你通常想要创建一个插件(当在另一个应用程序中需要这个代码时它很方便)。在这里,您可以找到如何创建插件http://guides.rubyonrails.org/plugins.html的指南,第3点显示如何扩展String类:http://guides.rubyonrails.org/plugins.html#extending-core-classes