【问题标题】:In Rails, can't add new methods to Array::Class in development env (works in test env)在 Rails 中,无法在开发环境中向 Array::Class 添加新方法(在测试环境中工作)
【发布时间】:2012-02-29 15:19:19
【问题描述】:

在我的 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 可以解决此问题,但我的猜测是它不是正确的解决方案。

任何想法为什么我对 Array 类的修改在开发 ENV 中被忽略?

干杯

【问题讨论】:

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


    【解决方案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 服务器。

    【讨论】:

      猜你喜欢
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多