2010-11-24 125 views
26

我創建了一組路徑&控制器與管理命名空間,我有一些問題使用鏈接助手與這些新的路線。rails使用link_to命名空間路由

我看到有一些新的路徑助手,比如admin_projects_path會導致/ admin/projects。然而,我無法連接到命名空間中的這些對象的顯示,編輯,銷燬等路徑。我怎麼做?

+1

我來這裏問這個確切的問題,這個確切的用例。 +1(我發現隨着時間的推移,更好的答案已經顯現) – Kristian 2013-05-03 13:44:34

回答

30

您應該看到rake routes中列出的所有路由,您可以使用這些名稱來獲取正確的命名空間。如果您手動輸入:controller:action,則使用自動檢測功能將無法正常工作。

如果它在路由中列爲new_thing,則該方法爲new_thing_path並帶有適當的參數。例如:

link_to('New Project', new_admin_project_path) 
link_to('Projects', admin_projects_path) 
link_to(@project.name, admin_project_path(@project)) 
link_to(@project.name, edit_admin_project_path(@project)) 
link_to(@project.name, admin_project_path(@project), :method => :delete) 
72

如果您使用的Rails 3,你可以用變量使用管理的命名空間,而不是寫長助手路徑名。

觀點:

<td><%= link_to 'Show', [:admin, project] %></td> 
<td><%= link_to 'Edit', [:edit, :admin, project] %></td> 
<td><%= link_to 'Destroy', [:admin, project], confirm: 'Are you sure?', method: :delete %></td> 

控制器:

redirect_to [:admin, @project] 
+0

答案應該明確更新爲這個! – 2013-01-29 00:40:38

+0

對於編輯操作,出於某種原因,我必須執行`<%= link_to'編輯',[:admin,:edit,project]%>`。 – 2014-02-04 14:54:11

1

一些方法要求:url選項作爲參數,並在這些情況下,你可以使用url_for生成路徑:

icon(:url => url_for(:controller => "admin/projects", :action => "edit", :id => @project), 
    :type => :edit)