2011-09-27 78 views
0

我添加了一個管理員命名,以我的應用程序時,那麼在登錄到管理區域時,它會是這樣:管理/網站和admin /頁/ 8路由錯誤添加管理員命名空間

所以這是我在我的路線.rb

namespace :admin do |admin| 
    match '/' => 'dashboard#index' 
    resources :websites 
    resources :pages 
    resources :sessions 
    get 'login' => 'sessions#new', :as => 'login' 
    get 'logout' => 'sessions#destroy', :as => 'logout' 
end 

我在app/controllers目錄中有admin_controller.rb。

class Admin::BaseController < ApplicationController 
    protect_from_forgery 
    include UrlHelper 
    ... 

我在app/controllers中創建了一個admin目錄。所以我這裏面的應用程序/控制器/管理/ websites_controller.rb

class Admin::WebsitesController < ApplicationController 

建議類聯繫一些其他的答案:: WebsitesController <聯繫:: BaseController,但從來沒有爲我工作。如果我錯了,請告訴我。

因此,然後在我的佈局文件(app/views/layouts/application.html.erb)我有像這樣的鏈接edit_admin_website_path(@website)給我路由錯誤Routing Error No route matches {:action=>"edit", :controller=>"admin/websites"} Whyyyy ?! :(

+2

這個錯誤返回的url選項通常應該是'{:action =>「edit」,:controller =>「admin/websites」,:id => 3}'或者任何id,你能檢查是否: '@ website'不是零,'@ website'被持久化(不是'new_record?') –

+0

您使用的是哪個版本的Rails? –

+1

一個巧妙的把戲:如果你發現'edit_admin_website_path(@website)'過於冗長,你可以使用(至少爲url /鏈接助手):'[:edit,:admin,@website]' –

回答

3

在管理目錄中添加一個名爲application_controller.rb文件與此內容:

class Admin::ApplicationController < ApplicationController 
end 

然後,每個控制器這個目錄上,擴展管理:: ApplicationController中類

您是否試過這個?

admin_edit_website_path(@website) 
+0

我比我更喜歡這個答案。 :) –

+0

對不起,關於路徑,我已經在控制器中進行了更改,@ Web站點不再被加載。所以我剛創建了一個名爲current_website的所有控制器可用的幫助方法,並將其編碼爲admin_edit_website_path(current_website) – leonel

+0

爲什麼這種方法會被認爲更好? – leonel

1

Rails命名空間依賴於文件夾結構來加載正確的類。 ou應該像這樣構造:

app/controllers 
    admin_controller.rb # class AdminController < ApplicationController 

app/controllers/admin 
    websites_controller.rb # class Admin::WebsitesController < AdminController 

AdminController應該在admin文件夾以外定義。如果把它放在那裏,你不得不把它稱爲Admin::AdminController,這有點奇怪。事實上,你可以稱之爲AdminNamespaceController

你也可以使用rails generate這將在預期的地方爲你設置,儘管我不認爲它會爲你創建名稱空間基類繼承。

+0

已更正。謝謝! – leonel