4

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

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

module FileUtils
  def last_modified_file(path='.')
     # blah ...    
  end
end

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

config.autoload_paths += %W(#{config.root}/lib)

我的其他自定义类已加载,但未加载模块。

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

所以我尝试了

module FileUtils
  class Object 
    def last_modified_file(path='.')
       # blah ...    
    end
  end
end

但这也行不通。

但是,当我启动 irb 并粘贴我的代码时,它有效地将我的新代码放入对象中并重新包含我的模块 - 它工作正常。

我在这里想念什么?

4

1 回答 1

14

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

只需从初始化程序中要求它。

require File.join(Rails.root, "lib/file_utils.rb")
于 2012-11-02T20:45:50.313 回答