2012-03-15 38 views
0

我都命名空間控制器和模型是這樣的:撤銷模型命名空間導致錯誤

控制器:模塊::保險 模式:模塊::保險

這工作得很好,但我想刪除的名稱空間模型恢復正常,但保留名稱空間控制器。我刪除了模型中的所有對「Modules ::」的引用,並將控制器中的所有activerecord查詢都刪除到模型中。當我訪問該網頁時,返回此錯誤:

Expected /***/app/models/modules/ins_insurance.rb to define Modules::InsInsurance 

我應該怎麼做,以去除名稱空間的模式?

回答

0

錯誤的根本原因是軌道期待文件modules/ins_insurance.rb內聲明的是Modules::InsInsurance類的名稱 - 文件名必須與類名拜變形器的underscoreclassify方法匹配(略轉換後:http://apidock.com/rails/ActiveSupport/Inflector/underscore)。所以將文件命名爲insurance.rb,你應該沒問題。

在一個更廣泛的主題上,我只能認爲你會遲早會遇到一個名爲modules的子目錄 - 至少它在Ruby關鍵字Module之間造成混淆。如果您正在尋找放置通用代碼的地方,請根據需要使用app/lib,然後使用require該文件。命名空間是一件很好的事情,但除非你遵循這個流程,否則你最終會與Rails戰鬥。 (經驗教訓很難;-)

+0

謝謝,但我想擺脫「Modules ::」的一部分,因爲它不再是一個命名空間。模塊路徑現在作爲autoload_path加載到application.rb中。所以我想我可以刪除模型中所有對Modules ::的引用。 – John 2012-03-16 07:46:23

+0

不是。類名和文件路徑和名稱在Rails世界中綁定在一起......它實際上是框架的許多許多特性的基礎,雖然有時會有點不透明,但它們使得Rails中的編碼看起來很神奇。如果你仍然沿着「Rails方式」傾斜的道路前進,也許你可以在這裏問另一個問題,問「我想要X來完成Y.這是一個好主意,什麼是最好的如何做到這一點?「。 Lotsa ninjas在這裏很樂意提供幫助。 – 2012-03-16 12:09:18