Rails:从控制台检查路径助手的输出


288

Rails用命名的路由定义了一堆魔术,这些魔术可以为您的路由提供帮助。有时,尤其是对于嵌套路由,在跟踪给定路由帮助方法调用时将获得的URL上可能会有些混乱。是否有可能使用Ruby控制台查看给定的辅助函数将生成什么链接?例如,给定像post_path(post)这样的命名帮助器,我想查看生成的URL。

Answers:


421

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

在Rails控制台中,您可以致电app.post_path。这将适用于Rails〜= 2.3和> = 3.1.0。


7
只是在我自己的评论的后续内容中,如果您正在使用,似乎可以从Rails 3控制台中实现。首先,通过调用诸如app.get "/" instance_eval之类的所需方法,将虚假请求添加到您的应用程序对象中 ,因为它们现在默认情况下受保护。就像这样: app.instance_eval{ post_path(post) }
Chubas 2010年

Chubas的上述注释在Rails 3中有效。这在编写测试时非常有用,因此我不必等待1分钟即可发现路线不正确。同样,测试获取和发布呼叫也很棒。您无需先致电app.get。
B

7
app.teh_path仍可在Rails 4.0中使用,对于将引擎路径与主要应用程序路径分开非常有用。
nurettin

5
如果要安装引擎,例如mount Spree::Core::Engine, :at => '/',则可以通过引擎名称访问路径,例如app.spree_core_engine.some_path。或者,如果将“ engine_name”配置为类似于此代码中的内容,则可以这样做app.spree.some_path
Jordan Brough 2014年

我必须host像这样添加参数:app.article_url(my_article, host: 'mydomain.com')
Besi

352

你也可以

include Rails.application.routes.url_helpers

从控制台会话内部访问助手:

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

要么

Rails.application.routes.url_helpers.users_path

4
这比上述解决方案IMO容易得多
安德鲁

2
我认为这是对原始问题的正确答案
nemesisdesign 2013年

这应该是IMO的最佳答案
路加福音

4
我不介意记住这一点,所以我每两天就回到这里进行复制/粘贴。谢谢。
斯宾塞

1
您还不能直接从控制台引用url_helpers Rails.application.routes.url_helpers.users_path吗?
TheMadDeveloper 2016年

25

在Rails控制台中,变量app包含一个会话对象,您可以在该对象上调用路径和URL帮助器作为实例方法。

app.users_path


2

请记住,您的路线是否以名称分隔,例如:

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>" 

1
谢谢你的spree例子,你是一个从天上掉下来的天使。
bonafernando
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.