2011-05-20 136 views
3

我有一個常用的佈局文件,用於站點範圍內。它包含諸如鏈接:Rails 3名稱空間路由:如何將*從*命名空間鏈接回全局名稱空間? [REVISED]

<%= link_to("Home", { :controller => :home, :action => :index }) %> 

和其他常見的鏈接在頁眉/頁腳等

我所有的控制器都只是app/controllers/目錄下。但我添加了一個命名空間,管理員(禁止用戶等):

namespace :admin do 
    resources :users 
end 

我的管理員命名空間是不是在看&感覺有什麼不同,所以它使用相同的佈局作爲網站的其餘部分。這是造成一些問題,因爲我所有的link_tourl_for呼叫被錯誤解讀爲,說:

<%= link_to("Home", { :controller => "admin/home", :action => :index }) %> 

其崩潰的應用程序,因爲沒有這樣的路由存在。我是否必須瀏覽佈局所使用的所有模板,並使用前導斜槓來更改link_to的控制器部分,還是有更好的方法可以讓我的所有頂級路線在管理員名稱空間下正常工作?我將管理員名稱空間鏈接到頂級名稱空間以獲得很多東西,所以如果我不必特別考慮我的link_to調用,那將是一件好事。

總之,在命名空間控制器下,你是否必須在link_to前加上所有:controller參數前面的前導斜槓以突破命名空間?

+0

嘗試使用 '<真正的資源名稱> /論壇',甚至<真正的資源名稱> _forums_path(或其他指定的路線是這樣的,因爲這只是一個猜測/建議。 – jaydel 2011-05-20 11:54:29

+0

但是,如果你趕上了我的漂移,那麼問題不在於鏈接到名稱空間路由,它是從名稱空間路由內部鏈接到非名稱空間路由? :)這就像你必須在你的佈局中的鏈接中使用向前的所有控制器名稱的前綴斜線,例如'<%= link_to(「Home」,{:controller =>「/ home」,:action =>:index}%>',否則它會嘗試在admin命名空間中找到一個「Home」控制器,在全局命名空間 – d11wtq 2011-05-20 12:01:00

+0

你可能會考慮這個:http://pandejo.blogspot.com/2009/03/rails-nested-resources-tutorial.html – jaydel 2011-05-20 12:01:57

回答

2

在路由上定義論壇路由並使用forums_path而不是:controller /:action哈希值應該足夠清晰。

的config/routes.rb文件:

match '/forums' => 'forums#index', :as => :forums 

瀏覽:

<li class="menuitem"><%= link_to("Forums", forums_path()) %></li> 
+0

謝謝,我實際上完全重寫了我的問題,而你發佈th是的,因爲我認爲它一定是太糟糕了;)我認爲命名路線應該解決很多,你是對的。與路由有一些爭鬥,但我認爲這只是因爲我不習慣Rails的做事方式o_O – d11wtq 2011-05-20 13:22:11