2011-11-30 17 views
4
namespace :admin do 
    root :to => "admin#index" 
end 

我可以訪問localhost:3000/admin,它的工作原理。 當我部署到heroku myapp.herokuapp.com/admin沒有。它生產這個與根的rails命名空間路由只能在開發中使用

ActionController::RoutingError (uninitialized constant Admin::AdminController):

我的控制器實際上是AdminController,而不是管理:: AdminController,我不太清楚區別是什麼或如何解決這個問題。

再一次,它都在本地工作。

回答

0

我從我的筆記本電腦遠離所以不能檢查,但就是:

root :to => "Admin#index" 

應該是:

root :to => "admin#index" 

呢?它可能沒有任何區別。

你有一個管理員文件夾內的控制器裏面有一個管理員控制器嗎?

如果您可以向我們顯示您的控制器代碼,這將是有益的感謝。

+0

資本「A」在我的問題中只是一個錯字,抱歉。我的admin文件夾中沒有我的管理員控制器,但其他子控制器位於管理員控制器中。我已經嘗試將管理控制器放置在該文件夾中。 –

2

您可以在rake routes的輸出中看到,對於此命名空間路線,導軌使用的是:controller => 'admin/admin'。當涉及到查找控制器類時,它會將admin/admin轉換爲Admin::AdminController。所以命名空間路由的控制器通常放在app/controllers/namespace_name目錄下,幷包裝在NamespaceName模塊中。在你的情況下,它應該是在app/controllers/admin/admin_controller.rb中定義的Admin::AdminController類。

儘管如此,爲什麼您的配置在開發過程中工作正常,但在生產模式下中斷(我試過併成功複製它),這真的很有趣。我相信它在生產模式下加載和緩存類沒有什麼作用,因爲在config/environments/development.rb中設置config.cache_classes = true也會導致它在開發模式下崩潰。

而作爲zoltarSpeaks指出它應該是root :to => "admin#index"而不是root :to => "Admin#index"

另一件需要注意的是,當有多個相關控制器時,通常會使用路由的命名空間。如果你需要的是一個AdminController你可以配置你的路由這樣的:

resources :admin, :only => :index 

在這種情況下,不需要其他變化(如果你想有其他的默認操作之外index只是刪除:only選項)。

+0

該路線實際上爲我顯示'/ admin'。但將其放入管理文件夾並使用Admin :: AdminController語法工作。唯一的問題是我的文件夾結構視圖是不太乾淨的意見/管理/管理/ index.html.erb(這也許是你的意思是管理員/管理員?)以前我有/admin/index.html.erb一起其他管理部門控制器的文件夾。 –

+0

哦,現在我看到一個問題。我有2個其他控制器作爲我的管理系統的一部分,它們的定義如下:訪問這些控制器的'Admin :: OrdersController

+0

爲此,我通常將基本管理控制器定義爲'Admin: :ApplicationController',然後將其他控制器設置爲Admin :: OrdersController