2010-05-06 6 views
52

Supongamos que tengo un enrutador que quiero más información, como blogs_path, ¿cómo puedo averiguar las declaraciones del mapa detrás de eso en la consola.Reconocer rutas en la consola de carriles Sesión

he intentado generar y reconocer y que ha obtenido un error método no reconocido, incluso después de que hice requerir 'config/routes.rb'

+0

encontrado la respuesta [aquí] (http://www.infinitecube.com/?p=5=1) ... –

Respuesta

92

Hay un buen resumen con ejemplos en Zobie's Blog que muestra cómo verificar manualmente el mapeo URL-a-controlador/acción y el inverso. Por ejemplo, comience con

r = Rails.application.routes 

acceder a las rutas objeto (página de Zobie, un par de años de edad, dice que el uso ActionController::Routing::Routes, pero que ahora está desfasada y en Rails.application.routes). A continuación, puede comprobar el enrutamiento basado en una URL:

>> r.recognize_path "/station/index/42.html" 
=> {:controller=>"station", :action=>"index", :format=>"html", :id=>"42"} 

y ver qué URL se genera para un controlador/acción determinada/parámetros de combinación:

>> r.generate :controller => :station, :action=> :index, :id=>42 
=> /station/index/42 

Gracias, Zobie!

+4

Nice. ¿Hay alguna manera de probar rutas con nombre como 'root_path' con este método? – brittohalloran

+6

@brittohalloran 'Rails.application.routes.url_helpers.my_path_helper' –

+0

Esto es increíble, este truco me ayudó a resolver otro problema, muchas gracias :) – kasperite

2

ejecutar el comando rutas desde el directorio del proyecto se mostrará el enrutamiento:

rake routes 

¿es esto lo que tenía en mente?

+0

rutas rastrillo darán todas las rutas. Estoy intentando algo más específico como .generate y .recognize métodos, excepto para los ayudantes. Entonces, si ingreso en blogs_path, debería obtener: action => index,: controller =>: blog –

34

Básicamente (si he entendido su pregunta derecha) que se reduce a que incluye el módulo de UrlWriter:

include ActionController::UrlWriter 
    root_path 
    => "/" 

o se puede anteponer aplicación a las llamadas en la consola por ejemplo:

ruby-1.9.2-p136 :002 > app.root_path 
    => "/" 

(se trata de todos los carriles v 3.0.3)

+26

incluye Rails.application.routes.url_helpers es la forma de Rails 3 para hacerlo. – Mirko

+1

para algunas rutas necesita configurar un host predeterminado para que funcionen p. Ej. default_url_options [: host] = 'foo' –

+1

'app.root_path' funcionó para mí – cevaris

50

En la consola de una aplicación Rails 3.2:.

# include routing and URL helpers 
include ActionDispatch::Routing 
include Rails.application.routes.url_helpers 

# use routes normally 
users_path #=> "/users" 
+3

No parece que' include ActionDispatch :: Routing' sea necesario. –

+8

No funciona en Rails 4. –

+1

Este es un gran candidato para su inclusión en el archivo '.pryrc' o' .irbrc' – user456584

3

errores Si usted está viendo como

ActionController::RoutingError: No route matches 

donde debería estar trabajando, puede que esté utilizando una joya rieles o motor que hace algo como Spree ¿Dónde se antepone rutas, es posible que tenga que hacer otra cosa para ver las rutas en la consola.

En el caso de juerga, esto está en el archivo de rutas

Spree::Core::Engine.routes.prepend do 
    ... 
end 

y trabajar como @ mike-Blythe sugiere, usted entonces hacer esto antes o generaterecognize_path.

r = Spree::Core::Engine.routes 
Cuestiones relacionadas