Rails不会从lib加载我的模块

kon*_*ung 2 ruby module ruby-on-rails ruby-on-rails-3

我在lib文件夹中的Rails 3.2应用程序中有一堆自定义类:即扩展ActiveRecord等.一切正常.

但是,我正在尝试向FileUtils添加一些自定义方法,即

module FileUtils
  def last_modified_file(path='.')
     # blah ...    
  end
end
Run Code Online (Sandbox Code Playgroud)

我把它放在lib/file_utils.rb中我的application.rb我有

config.autoload_paths += %W(#{config.root}/lib)
Run Code Online (Sandbox Code Playgroud)

我的其他自定义分类已加载但不是模块.

我读过(在Rails 3中从lib文件夹加载模块/类的最佳方法?)我应该在模块内部定义一个类,以便Rails根据FileUtils.class来获取它 - 它应该是Object <BasicObject .

所以我试过了

module FileUtils
  class Object 
    def last_modified_file(path='.')
       # blah ...    
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但这也不起作用.

然而,当我启动irb并且只是粘贴我的代码,它有效地将我的新代码放入对象并重新包含我的模块 - 它工作正常.

Whaat amd我在这里失踪了?

Chr*_*ald 12

永远不会加载您的补丁,因为只有在Rails找不到常量时才会调用自动加载.由于FileUtils常量已存在,因此永远不会调用自动加载器,并且永远不会加载您的文件.

只需从初始化程序中获取它.

require File.join(Rails.root, "lib/file_utils.rb")
Run Code Online (Sandbox Code Playgroud)

  • 正确.自动加载仅适用于尚不存在的常量.当遇到丢失的常量时,Rails会在自动加载路径中搜索与常量名称的snake_cased版本匹配的文件并加载它. (4认同)