1

/lib/models/scopes.rbにモジュールがあります

module Models
    module Scopes
        extend ActiveSupport::Concern
        ...
    end
end

私はモデルからそれを含めようとしています:

class User < ActiveRecord::Base
  include Models::Scopes
end

そしてエラーが発生します:

NameError: 初期化されていない定数 User::Models

この問題を解決するにはどうすればよいですか?このタイプのファイルを /lib に保存するのは間違っているのでしょうか?

環境: Rails v3.1 Ruby v1.9.3

4

2 に答える 2

8

Rails はディレクトリ内のファイルを自動的に必要としませんがlib、自動ロードされたパスにconfig/application.rb次のように追加できます。

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

サーバーを再起動して、新しい設定を取得します。

これにより、モジュール名が最初に使用されたときにファイルが自動的にロードされます。開発モードでは、サーバーを再起動せずに変更を確認するために、変更のたびにモジュールをリロードすることができます。これを行うには、代わりに熱心なロード パスとして追加します。

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

内部Modelsまたは他の場所にクラスまたはモジュールがない限り、スコープは問題になりません。 User

于 2012-07-10T20:41:40.200 に答える
2

クラスを定義すると、新しいスコープが「開かれます」。そうするとModels::Scopes、ruby は を探しUser::Models::Scopesます。を使用してこれを修正できます。これ::Models::Scopesは、::Ruby にグローバル スコープを調べるように指示するものです。

参考までに: 私が使用した用語についても、私の考えが正しいかどうかについてもわかりません。とにかく解決策は良いはずです。::Models::Scopeが見つからなかった場合、 Ruby は for を試行すると思いますUser::Models::Scopeが、そうではありません。User::Modelsどこかにスコープが定義されているのではないでしょうか? とにかく、ご覧のとおり、私はまだそれらに慣れていません。興味があれば、そのテーマについて掘り下げることができます

于 2012-07-10T20:24:27.577 に答える