ale*_*lex 48 ruby monkeypatching ruby-on-rails-3
我想在我的Rails项目中为不同的对象构建一个索引,并希望添加一个'count_occurences'方法,我可以在String对象上调用它.
我看到我可以做类似的事情
class String
def self.count_occurences
do_something_here
end
end
Run Code Online (Sandbox Code Playgroud)
定义此方法的确切方法是什么,以及将代码放在我的Rails项目中的位置?
谢谢
Rya*_*igg 93
您可以在应用程序中定义一个新类,lib/ext/string.rb并将其放入其中:
class String
def to_magic
"magic"
end
end
Run Code Online (Sandbox Code Playgroud)
要加载此类,您需要在config/application.rb文件或初始化程序中要求它.如果你有很多这些扩展,初始化器更好!加载它的方法很简单:
require 'ext/string'
Run Code Online (Sandbox Code Playgroud)
to_magic然后,该方法将在应用程序/控制台内的类的实例上可用String,即:
>> "not magic".to_magic
=> "magic"
Run Code Online (Sandbox Code Playgroud)
无需插件.
Chr*_*ies 12
我知道这是一个旧线程,但似乎并不像Rails 4+中所接受的解决方案(至少不适合我).将扩展名rb文件放入config/initializers中.
或者,您可以将/ lib添加到Rails自动加载器(在config/application.rb中,在Application类中:
config.autoload_paths += %W(#{config.root}/lib)
require 'ext/string'
Run Code Online (Sandbox Code Playgroud)
见:http: //brettu.com/rails-ruby-tips-203-load-lib-files-in-rails-4/
当你想扩展一些核心类时,你通常想要创建一个插件(当在另一个应用程序中需要这段代码时它很方便)。在这里您可以找到如何创建插件的指南http://guides.rubyonrails.org/plugins.html和第 3 点向您展示如何扩展 String 类:http : //guides.rubyonrails.org/plugins.html#扩展核心类
| 归档时间: |
|
| 查看次数: |
28208 次 |
| 最近记录: |