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

Der*_*urn 274 ruby-on-rails

Rails定义了一堆带有命名路由的魔法,为你的路线提供帮助.有时,特别是对于嵌套路由,跟踪给定路由助手方法调用所获得的URL会有点混乱.是否有可能使用Ruby控制台查看给定帮助函数将生成什么链接?例如,给定一个像post_path(post)这样的命名助手,我想看看生成了什么URL.

Chu*_*bas 406

您可以rake routes直接显示它们.

在Rails控制台中,您可以调用app.post_path.这将适用于Rails~ = 2.3和> = 3.1.0.

  • `app.foo_path`似乎适用于Rails 3.1.0. (11认同)
  • 只是在跟进我自己的评论时,似乎可以从rails 3控制台获得,以防你正在使用.第一,坚持一个假的请求在您的应用对象,通过调用像`app.get"/"`然后就instance_eval的有用方法,因为他们现在默认的保护.类似的东西:`app.instance_eval {post_path(post)}` (7认同)
  • `app.teh_path`仍然可以在Rails 4.0中运行,对于从主应用程序路径中分离引擎路径非常有用. (7认同)
  • 如果您正在安装引擎,例如`mount Spree :: Core :: Engine,:at =>'/'`,那么您将通过引擎名称访问路径,例如`app.spree_core_engine.some_path`.或者,如果"engine_name"配置为不同的[在此代码中](https://github.com/spree/spree/blob/v2.3.0/core/lib/spree/core/engine.rb# L5)然后你要做'app.spree.some_path`. (5认同)

小智 320

你也可以

include Rails.application.routes.url_helpers
Run Code Online (Sandbox Code Playgroud)

从控制台会话内部访问帮助程序:

url_for controller: :users, only_path: true
users_path
# => '/users'
Run Code Online (Sandbox Code Playgroud)

  • 这比上述解决方案IMO容易得多 (4认同)
  • 我不记得要记住这一点,所以我每隔几天就回来这里复制/粘贴.谢谢. (4认同)
  • 在我看来,这是对原始问题的正确答案 (2认同)
  • 难道你不能直接从控制台引用 url_helpers 吗,比如“Rails.application.routes.url_helpers.users_path”? (2认同)

小智 23

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

app.users_path
Run Code Online (Sandbox Code Playgroud)


Dee*_*ale 11

您始终可以检查path_helpers控制台中的输出.只需使用帮助器即可app

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

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"
Run Code Online (Sandbox Code Playgroud)