8

モジュール名とフォルダー構造に問題があります。

次のように定義されたモデルがあります

module API
  module RESTv2
    class User
    end
  end
end

フォルダ構造は次のようになります

models/api/restv2/user.rb

クラスにアクセスしようとすると、初期化されていない定数エラーが発生します。ただし、モジュール名を REST に変更し、フォルダーを /rest に変更すると、エラーは発生しません。

問題はフォルダの命名に関係していると思います./rest_v_2、/rest_v2、/restv_2などのさまざまな組み合わせをすべて試しました.

助言がありますか?

4

2 に答える 2

10

Rails、モジュールまたはクラス名に「underscore」メソッドを使用して、まだ認識していない定数に遭遇したときに、どのファイルをロードするかを見つけようとします。この方法でモジュールを実行すると、最も直感的な結果が得られないようです。

"RESTv2".underscore
# => "res_tv2"

アンダースコアがこの選択をする理由はわかりませんが、モジュールディレクトリの名前を上記に変更すると問題が解決するに違いありません(ただし、ディレクトリ名が適切であるため、「RestV2またはRESTV2」に名前を変更することをお勧めします)。

于 2013-06-17T14:39:40.120 に答える
5

app/model ディレクトリのサブディレクトリで自動ロードするように Rails を構成する必要があります。これを config/application.rb に入れます:

config.autoload_paths += Dir["#{config.root}/app/models/**/"]

次に、それらのファイルを自動ロードできるはずです。

また、Rails は String.underscore を使用してファイル名を決定するため、おそらくファイル名は app/model/api/res_tv2/user.rb である必要があります。複数のタイプの API を持っていない限り、頭痛を避けるために API::V2::User と呼びます。

于 2013-06-17T14:34:28.400 に答える