2010-03-24 12 views
5

Ho un controller senza alcun modello correlato. Questo controller deve estrapolare alcune informazioni da vari modelli. Ho molte azioni lì, che definiscono determinate visualizzazioni sulla pagina. Quale sarebbe il modo migliore per organizzare i percorsi per questo controller?Basic Ruby on Rails Domanda sull'instradamento

Quello che vorrei è avere/dashboard/qualcosa che punti a qualsiasi azione nel controller dashboard. Non azioni come new/edit ma arbitrarie (showstats, ecc.).

Con tentativi ed errori ho fatto qualcosa di simile:

map.dashboard 'dashboard/:action', :controller => 'dashboard', :action => :action 

Ora è possibile accedere a tali URL utilizzando l'helper:

dashboard_url('actionname') 

Questo approch sembra funzionare bene, ma è questa è la strada da percorrere? Non sono del tutto sicuro di capire come vengono generati i nomi dei metodi di supporto. Come generare gli stessi nomi di helper dei controller di base "action_controller_url"? Sarebbe più generico e reso il codice più coerente.

Grazie in anticipo.

risposta

5

Non è necessario specificare la chiave :action => :action nel percorso, ciò è già fatto per l'utente. A parte questo, come hai fatto va bene.

È inoltre possibile specificare come un simbolo: dashboard_url(:actionname), ma si sapeva già che;)

+0

C'è un modo per riformattare l'assistente, o fornire uno personalizzato? IE: actionname_dashboard_url invece dashboard_url (: actionname)? – mdrozdziel

+0

Dovresti definire un nuovo percorso per ogni singolo. Il singolare metodo di instradamento è più lungo di un paio di caratteri, ma produce meno codice in generale. –

+0

Sì, penso ci sia un meccanismo automatico, che genera gli helper al volo, ma poiché non è così, mi limito ad attenermi alla convenzione dashboard_url (: actionname). – mdrozdziel

2

Se volete metodi di supporto per tutte le vostre azioni dashboard è necessario specificare tutti utilizzando percorsi denominati, ad esempio:

map.example_dashboard 'dashboard/example', :controller => 'dashboard', :action => 'example' 
map.another_dashboard 'dashboard/another', :controller => 'dashboard', :action => 'another' 

Quindi i binari generano un helper _url e uno _path per ogni percorso denominato. Preferisco il tuo approccio, però, è più flessibile e semplice.

+0

La pagina indice per OrdersController e ClientsController non sarebbe la posizione migliore per servire la "dashboard" di questi? –

+0

Definitivamente, stavo solo inventando i nomi delle azioni per il mio esempio. Lo cambierò in qualcos'altro. – Teoulas

0

Come per generare i nomi helper stessi come a controllori di base "action_controller_url"?

map.action_controller(
    'action_controller', 
    :controller => 'controller', 
    :action => 'action', 
    :conditions => { :method => :get } # You can restrict the HTTP reqs allowed 
) 
+0

Questa non è davvero la risposta. Se avrò 50 azioni, allora dovrò copiare questo codice 50 volte o creare alcuni loop werid sulla mappa ... – mdrozdziel