不,你不能在一個目錄中,如自動加載路徑(app/models
)頂級告訴Rails尋找一個合格的常數(如MyApp::User
)。當Rails看到MyApp::User
(代碼不在模塊定義內)時,它只會在自動加載路徑中的目錄中查找my_app/user.rb
。
您從不使用限定常量可以欺騙Rails很多時間。如果你的控制器都在同一個命名空間,下面將工作:
應用程序/控制器/程序my_app/users_controller.rb
module MyApp
class UsersController < ApplicationController
def index
@users = User.all
end
end
end
應用程序/模型/ user.rb
module MyApp
class User < ActiveRecord::Base
end
end
的Rails沒有按不知道控制器中引用的User
是頂層還是MyApp
,所以它會查找app/models/user.rb
和app/models/my_app/user.rb
。同樣,您可以從其他名稱空間模型自動加載名稱空間模型app/models
。
但是,只要需要從名稱空間中本身不存在的代碼引用名稱空間模型,就會碰壁(也就是說,您必須手動要求模型類文件),例如,在控制檯或單元測試中。如果在子目錄中有控制器,但模型不在子目錄中,那將是愚蠢的。而且你會迷惑任何看着你的代碼的人。所以最好的做法是遵循Rails約定,並將你的命名空間模型放在app/models
的子目錄中。
嗨。我相信你知道這一點。但是,看起來你正在與Rails公約打交道。我想知道,只要遵守這些慣例,你是不是更好。不是你的問題的答案(對不起),只是一個想法。 – jvillian
是的,我知道它,如果我必須使用一個額外的文件夾,這將是世界的盡頭,但我想知道是否有一種簡單的方法來保持清潔。 謝謝 – macsig