2010-11-24 14 views
26

Ich habe eine Reihe von Routen & Controller mit dem Admin-Namespace erstellt, und ich hatte einige Probleme mit den Link-Helfer mit diesen neuen Routen.Schienen mit link_to mit Namespaced Routen

Ich sehe, dass es einige neue Pfadhelfer gibt, wie zum Beispiel admin_projects_path, der zu den/admin/projects führt. Ich habe jedoch Probleme beim Verlinken zu den Show-, Edit-, Destroy-, usw. Pfaden für diese Objekte im Namespace. wie mache ich das?

+1

Ich kam hierher, um genau diese Frage für genau diesen Anwendungsfall zu stellen. +1 (ich sehe, dass sich im Laufe der Zeit eine bessere Antwort gezeigt hat) – Kristian

Antwort

30

Sie sollten alle Ihre Routen in rake routes aufgeführt und Sie können diese Namen verwenden, um den richtigen Namespacing zu erhalten. Die automatische Erkennung, bei der Sie :controller und :action manuell übergeben, funktioniert nicht wie Sie festgestellt haben.

Wenn es in den Routen als new_thing aufgeführt ist, lautet die Methode new_thing_path mit den entsprechenden Parametern. Zum Beispiel:

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

Wenn Sie mit Rails 3, können Sie Ihren Admin-Namensraum mit den Variablen verwenden, anstatt die langen Helfer Pfadnamen zu schreiben.

Ansicht:

<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> 

Controller:

redirect_to [:admin, @project] 
+0

Die Antwort sollte auf jeden Fall aktualisiert werden !!! –

+0

Für die Bearbeitungsaktion musste ich '<% = link_to 'Edit', [: admin,: edit, project]%>' aus irgendeinem Grund tun. –

+0

+1 für die Antwort, und ich denke, das sollte als die angenommene Antwort aktualisiert werden und seine genauere – sameera207

1

Einige Methoden erfordern eine: url Option als Parameter, und in diesen Fällen können Sie verwenden url_for den Pfad zu generieren:

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

Rails gibt uns einen automatischen Helfer für den URL-Pfad mit 'edit_admin_project_url'. – rxgx