2010-05-17 6 views
228

Rails define un montón de magia con rutas con nombre que hacen que los ayudantes de sus rutas. A veces, especialmente con rutas anidadas, puede ser un poco confuso hacer un seguimiento de qué URL obtendrá para una llamada de método de ayuda de ruta determinada. ¿Es posible, usando la consola de Ruby, ver qué enlace generará una función auxiliar determinada? Por ejemplo, dado un helper nombrado como post_path (post), quiero ver qué URL se genera.Rieles: Compruebe la salida del asistente de ruta desde la consola

Respuesta

338

Puede mostrarlos directamente con rake routes.

En una consola de Rails, puede llamar al app.post_path. Esto funcionará en Rails ~ = 2.3 y> = 3.1.0.

+7

acaba en un seguimiento de mi propio comentario, parece que esto es posible a partir de 3 carriles de la consola, en caso de que esté utilizando. En primer lugar, se adhieren una solicitud falsa en su objeto de aplicación, llamando a algo así como 'app.get "/"' a continuación, sólo instance_eval los métodos deseados, ya que ahora están protegidos por defecto. Algo así como: 'app.instance_eval {post_path (post)}' – Chubas

+0

El comentario de Chubas anterior funcionó en Rails 3. Esto es muy útil al escribir pruebas, así que no tengo que esperar 1 minuto para descubrir que la ruta es incorrecto. Además, es genial probar y recibir y publicar llamadas. No necesita llamar a app.get primero. –

+10

'app.foo_path' parece funcionar en Rails 3.1.0. –

257

también puede

include Rails.application.routes.url_helpers 

desde el interior de una sesiones de consola para tener acceso a los ayudantes:

url_for controller: :users, only_path: true 
users_path 
# => '/users' 
+4

Esto es mucho más fácil que la solución anterior IMO – Andrew

+2

esta es la respuesta correcta a la pregunta original en mi opinión – nemesisdesign

+0

Esta debería ser la mejor respuesta IMO –

15

En la consola de Rails, la aplicación variable contiene un objeto de sesión en la que se puede llamar ruta y Ayudantes de URL como métodos de instancia.

app.users_path 
1

Recuerde si la ruta es el nombre a un espacio, como:

product GET /products/:id(.:format) spree/products#show 

A continuación, intente:

helper.link_to("test", app.spree.product_path(Spree::Product.first), method: :get) 

salida

Spree::Product Load (0.4ms) SELECT "spree_products".* FROM "spree_products" WHERE "spree_products"."deleted_at" IS NULL ORDER BY "spree_products"."id" ASC LIMIT 1 
=> "<a data-method=\"get\" href=\"/products/this-is-the-title\">test</a>" 
7

Siempre se puede CHEC k la salida de path_helpers en la consola. Sólo tiene que utilizar el ayudante con app

app.post_path(3) 
#=> "/posts/3" 

app.posts_path 
#=> "/posts" 

app.posts_url 
#=> "http://www.example.com/posts" 
Cuestiones relacionadas