4

Rails3.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がそれを取得するためにモジュール内にクラスを定義することになっていることを読んだ(Rails 3のlibフォルダーからモジュール/クラスをロードする最良の方法?)そして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 に答える