2010-11-24 39 views
26

He creado un conjunto de controladores de rutas & con el espacio de nombres admin, y tuve algunos problemas al usar los ayudantes de enlace con estas nuevas rutas.rieles usando link_to con rutas de nombres de espacio

Veo que hay algunos nuevos ayudantes de ruta, tales como admin_projects_path que conduce a/admin/projects. sin embargo, tengo problemas para vincular las rutas show, edit, destroy, etc. para estos objetos dentro del espacio de nombres. ¿Cómo puedo hacer eso?

+1

Vine aquí para hacer esta pregunta exacta para este caso de uso exacto. +1 (veo que una mejor respuesta se ha demostrado a lo largo del tiempo) – Kristian

Respuesta

30

Debería ver todas las rutas enumeradas en rake routes y puede usarlas por su nombre para obtener el espacio de nombre adecuado. El uso de la detección automática donde pase en :controller y :action manualmente no funcionará como lo ha descubierto.

Si aparece como new_thing en las rutas, entonces el método es new_thing_path con los parámetros apropiados. Por ejemplo:

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

Si está utilizando Rails 3, puede utilizar el administrador de espacio de nombres con la variable en lugar de escribir el nombre de ruta larga ayudante.

vista:

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

controlador:

redirect_to [:admin, @project] 
+0

¡La respuesta debería estar definitivamente actualizada a esto! –

+0

Para la acción de edición, tuve que hacer '<% = link_to 'Edit', [: admin,: edit, project]%>' por algún motivo. –

+0

+1 por la respuesta, y creo que esto debe actualizarse como la respuesta aceptada y es más preciso – sameera207

1

Algunos métodos requieren la opción: URL como un parámetro, y en esos casos se puede utilizar url_for para generar la ruta:

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

Rails nos da un ayudante automático para la ruta URL con 'edit_admin_project_url'. – rxgx

Cuestiones relacionadas