2009-04-08 22 views
6

Se si aggiunge una mappa delle risorse per uno spazio dei nomi nella vostra routes.rb in Rails 2.3, come si fa a fare link_to (e form_for, ecc) capire che si deve ottenere il controllo namespace invece di uno nel spazio dei nomi di root?Rails: il routing corretto per le risorse namespace

Per esempio ...

Con questo in routes.rb:

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

E questo nella vista:

<%= link_to @anOptInUser %> 

Che link_to dovrebbe usare link_for_admin_opt_in_user, ma invece cerca di usare link_for_opt_in_user, che non riesce.

risposta

7

Con risorse namespace, come con le risorse nidificate, è possibile utilizzare un array con un simbolo:

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

o

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

Si applica ancora per Rails 3.1.3. – olistik

2

le rotaie documentazione per url_for indicare che avrei dovuto chiamare questo in modo esplicito:

Se invece di un hash passa un record (come un Active Record o Active Resource) come parametro opzioni, attiverai la rotta indicata per il record . La ricerca avverrà su il nome della classe. Quindi passando un oggetto Workshop tenterà di utilizzare il percorso workshop_path. Se si dispone di una route nidificata , ad esempio admin_workshop_path, è necessario chiamare esplicitamente (è impossibile per url_for indovinare tale percorso).

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

+0

Sì, questo è quello che ho finito per fare ... Grazie per la conferma è il unico modo!(anche se non sarei d'accordo è * impossibile * per url_for indovinare il percorso se ne esiste solo uno!) – nevyn

0

rotaie può accettare un array di oggetti che sono poi mappati in un percorso di nome

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

Otterrete un link al /articles/@article.to_param/comments/@article.to_param

Questo può essere usato in form_for e in altri luoghi, nonché

0

Usa :

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

Per la raccolta:

admin_opt_in_users_path 

È inoltre possibile aggiungere modifiche e nuovi prefissi.

Quando si utilizza form_for assicurarsi di passare admin_opt_in_users_path alla nuova azione e admin_opt_in_user_path (@anOptInUser) all'azione di modifica.

Problemi correlati