在Rails中,如何向String类添加新方法?

时间:2011-09-20 19:28:09

标签: ruby ruby-on-rails-3 monkeypatching

我想在我的Rails项目中为不同的对象构建索引,并希望添加一个'count_occurences'方法,我可以在String对象上调用它。

我看到我可以做类似

的事情
class String
  def self.count_occurences
    do_something_here
  end
end

定义此方法的确切方法是什么,以及将代码放在我的Rails项目中的哪个位置?

由于

3 个答案:

答案 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