2009-04-08 27 views
6

Si agrega un mapa de recursos a un espacio de nombres en su routes.rb en Rails 2.3, ¿cómo hace que link_to (y form_for, etc.) comprendan que debería obtener el controlador de espacio de nombres en lugar de uno en el espacio de nombres raíz?Rails: enrutamiento correcto para recursos de espacio de nombres

Por ejemplo ...

Con esto en routes.rb:

map.namespace :admin do |admin| 
    admin.resources :opt_in_users 
end 

Y esto a la vista:

<%= link_to @anOptInUser %> 

Eso link_to debe utilizar link_for_admin_opt_in_user, pero en su lugar se trata de utilizar link_for_opt_in_user, que falla.

Respuesta

7

Con recursos de espacios de nombres, al igual que con los recursos anidados, puede utilizar una matriz con un símbolo:

link_to 'Click here', [:admin, @opt_in_user] 

o

form_for [:admin, @opt_in_user] do |form| .... 
+0

Todavía se aplica a Rails 3.1.3. – olistik

2

los documentos carriles para url_for indicar que tendría que llamar a esto de forma explícita:

Si en lugar de un hash pasa un registro (como un Registro Activo o Active de recursos) como el parámetro de opciones, activará la ruta nombrada para ese registro. La búsqueda ocurrirá en el nombre de la clase. Por lo tanto, al pasar un objeto de taller se intentará usar la ruta del camino del taller. Si tiene una ruta anidada , como admin_workshop_path, tendrá que llamar a explícitamente (es imposible para url_for adivinar esa ruta).

(de http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#M001564)

+0

Sí, eso es lo que terminé haciendo ... Gracias por confirmar que es el ¡la única manera!(¡Aunque no estoy de acuerdo con que sea * imposible * para url_para adivinar la ruta si existe una sola!) – nevyn

0

Rails puede aceptar una matriz de objetos que luego se mapea en una ruta denominada

por ejemplo <% = link_to @ comment.title, [@ article, @comment]%>

Usted obtendrá un enlace a /articles/@article.to_param/comments/@article.to_param

Esto puede ser usado en form_for y otros lugares, así

0

Uso :

link_to '...', admin_opt_in_user_path(@anOptInUser) 

en la colección:

admin_opt_in_users_path 

También puede agregar ediciones y nuevos prefijos.

Cuando usa form_for asegúrese de pasar admin_opt_in_users_path en la acción nueva y admin_opt_in_user_path (@anOptInUser) en la acción de edición.

Cuestiones relacionadas