在Rails中,无法在开发环境中向Array :: Class添加新方法(在测试环境中工作)

时间:2012-02-29 15:19:19

标签: arrays ruby-on-rails-3 unit-testing

在我的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类的修改的想法?

干杯

1 个答案:

答案 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服务器。