在我的Rails应用程序中,在 app / models / 中,我有一个名为 array.rb 的文件,其中包含以下代码:
class Array
def sum_f
#my code
end
end
当我运行控制台时, Array.new.respond_to?(:sum_f)会返回 false ,而测试控制台会返回是的(并且方法效果很好)。
我已经发现在 development.rb 中将 config.cache_classes 设置为 true 修复了此问题,但我的猜测是它不是正确的解决方案。
为什么我在开发ENV中忽略了对Array类的修改的想法?
干杯
答案 0 :(得分:1)
Rails,在开发中,懒洋洋地加载文件。这意味着除非您明确要求,否则在您需要它之前不会加载该文件。
我所做的是创建一个初始化程序,如config/initializers/core_ext.rb
其中包括我的所有应用程序的核心扩展。
Dir[Rails.root.join('lib', 'core_ext', '**', '*.rb)].each {|f| require f}
然后,在lib/core_ext
中添加所有核心扩展(例如lib/core_ext/array
示例)目录,并在启动应用程序时自动加载它们。
这也意味着每次更改核心扩展文件时,都需要重新启动rails服务器。