2010-03-24 19 views
5

Tengo un controlador sin ningún modelo relacionado. Este controlador debe abarcar cierta información de varios modelos. Tengo muchas acciones allí, que definen ciertas vistas en la página. ¿Cuál sería la mejor manera de organizar las rutas para este controlador?Ruby on Rails básico Pregunta sobre el enrutamiento

Lo que me gustaría es tener/tablero de control/algo que indique cualquier acción en el panel de control. No acciones como new/edit pero arbitrarias (showstats, etc.).

Con ensayo y error que hice algo como esto:

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

Ahora es posible acceder a las direcciones URL utilizando el ayudante:

dashboard_url('actionname') 

Este approch parece estar funcionando bien, pero es este es el camino a seguir? No estoy seguro de entender, ¿cómo se generan los nombres del método auxiliar? ¿Cómo generar los mismos nombres de ayuda que en los controladores básicos "action_controller_url"? Eso sería más genérico e hizo que el código sea más consistente.

Gracias de antemano.

Respuesta

5

No necesita especificar la clave :action => :action en la ruta, esto ya está hecho para usted. Aparte de eso, cómo lo has hecho está bien.

También se puede especificar como un símbolo: dashboard_url(:actionname), pero ya sabía que;)

+0

¿Hay una manera de cambiar el formato del ayudante, o proporcionar una costumbre? IE: actionname_dashboard_url en cambio dashboard_url (: actionname)? – mdrozdziel

+0

Debería definir una nueva ruta para cada uno. El método de ruta singular tiene un par de caracteres más largos, pero genera menos código en general. –

+0

Sí, pensé que hay un mecanismo automático, que genera los ayudantes sobre la marcha, pero ya que no es el caso, me limitaré a la convención dashboard_url (: nombre de acción). – mdrozdziel

2

Si quieren métodos de ayuda para todas sus acciones del tablero de instrumentos se debe especificar todos ellos utilizando rutas con nombre, por ejemplo:

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

A continuación, los rieles generarán una _url y una _ruta auxiliar para cada ruta especificada. Aunque prefiero tu enfoque, es más flexible y simple.

+0

¿No sería la página de índice para OrdersController y ClientsController un lugar mejor para servir el "tablero" de estos? –

+0

Definitivamente, solo estaba inventando nombres de acción para mi ejemplo. Lo cambiaré a otra cosa. – Teoulas

0

cómo generar mismos nombres como ayudante en controladores básicos "action_controller_url"?

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

Esta no es realmente la respuesta. Si voy a tener 50 acciones, tendré que copiar este código 50 veces o crear algunos werid loops sobre el mapa ... – mdrozdziel