2010-05-17 195 views
228

Rails定义了一系列具有命名路由的魔术,可以为路由创建助手。有时候,特别是对于嵌套路由,它可能会有点困惑,以便跟踪给定路由帮助方法调用的URL。是否有可能使用Ruby控制台查看给定帮助函数将生成的链接?例如,给定一个像post_path(post)这样的名字助手,我想查看生成的URL。Rails:从控制台检查路径助手的输出

回答

338

您可以直接使用rake routes向他们展示。

在Rails控制台中,您可以拨打app.post_path。这将工作在Rails〜= 2.3和> = 3.1.0。

+7

,似乎这是有可能从轨3游戏机的,如果你正在使用。 第一,坚持一个假的请求在您的应用对象,通过调用像 'app.get“/”' 然后就instance_eval的有用方法,因为他们现在默认的保护。例如: 'app.instance_eval {post_path(post)}' – Chubas 2010-05-17 02:17:44

+0

上面的Chubas的注释工作在Rails 3中。这在编写测试时非常有用,所以我不必等待1分钟才能发现路由是不正确。此外,测试获得和发布呼叫是很好的。你不需要先调用app.get。 – 2011-08-17 16:50:39

+10

'app.foo_path'似乎可以在Rails 3.1.0中使用。 – 2011-10-06 17:50:55

257

你也可以

include Rails.application.routes.url_helpers 

从控制台会话中访问助手:

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

这比上述解决方案要容易得多IMO – Andrew 2013-01-10 01:43:24

+2

这是对原始问题的正确答案我的意见 – nemesisdesign 2013-04-10 09:36:14

+0

这应该是最好的解决办法IMO – 2015-02-16 15:57:30

15

在Rails的控制台,变量应用程序保存会话对象上,你可以调用路径URL助手作为实例方法。

app.users_path 
1

请记住,如果您的路线是命名空间的,像:

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

然后尝试:

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

输出

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

您可以随时CHEC k在控制台中输出path_helpers。才刚刚在我自己的意见的后续使用助手与app

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

app.posts_path 
#=> "/posts" 

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