0

「lib」がデフォルトで自動ロードされなくなったことに気付きました。しかし、私はこれを私の application.rb ファイルに持っています:

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

libutility.rbに、次のように宣言された というモジュールがあります。

module MyApp
  module Utility

そこにはいくつかのユーティリティ メソッドがあります。たとえば、配列を取り、それを MySQL からクエリできる値に変換するメソッドです。私は持っている:

include MyApp

そのメソッドを必要とするクラスの先頭にあるので、次のように呼び出すことができます。

Utility::array_to_query_string

残念ながら、これは機能しません。rake タスクまたはアプリケーションのどちらを実行していても、次のように遭遇します。

uninitialized constant MyApp

require上記以外のRailsの作り方がわかりません。コンソールで、明示的に入力require 'utility'すると、インクルードを正常に実行できます。Rails にこのモジュールを自動ロードさせるにはどうすればよいですか?

4

2 に答える 2

2

問題は、libフォルダー内のディレクトリ構造にある可能性があります。Railsオートローダーがファイルを検出できるようにするには、ファイルを適切な場所に配置する必要があります。モジュールMyApp::Utilityは、次のファイルに存在する必要がありますlib/my_app/utility.rb

ファイルをliblib/utility.rbに直接配置すると、オートローダーはそれを見つけられません。

于 2012-12-31T16:35:20.440 に答える
0

一部のアプリでは、カスタム コードを読み込む初期化子を追加しています。

config/initializers/utility.rb で、

require "#{Rails.root}/lib/utility"
于 2012-12-31T16:41:07.530 に答える